X



2ch特化型サーバ・ロケーション構築作戦 Part20

■ このスレッドは過去ログ倉庫に格納されています
1root▲ ★
垢版 |
NGNG
2ch特化型サーバ・ロケーション構築作戦のスレッドです。

・2ちゃんねるのサーバロケーション、PIEに関する関連作業・調整事項
・DNS登録・変更まわりの関連作業・調整事項
・2ちゃんねるのサーバで採用しているOS、FreeBSDに関する情報・調整事項
・各種作戦・プロジェクトとの連携、プロジェクト間の連携

等を取り扱います。

現在、複数サーバによる連携により、
サーバ能力のさらなるスケールアップをめざすための「雪だるま作戦」が進行中です。

また、次世代の携帯アクセス環境をめざした「べっかんこ作戦」も稼動しはじめました。
「2ちゃんねる証券取引所」や、「Be」の機能強化等、
2ちゃんねるは今日も変化し続けています。

前スレ:
2ch特化型サーバ・ロケーション構築作戦 Part19
http://qb5.2ch.net/test/read.cgi/operate/1121886018/
2006/03/17(金) 22:46:17ID:pvQ2ZSVI0
458です。少し興味がわいたので、
>>461を参考にsrclib/apr/dso/unix/dso.cに修正をいれて、家のマシンでテストしてみました。
修正点は、dlopen()とdlclose()の呼び出し前後にmutexのlockとunlockを入れたことです。

環境:
FreeBSD 6.1-PRERELEASE i386 SMP
Apache 2.2.0 worker

テストに使用したソース:
ttp://sunos.saita.ma/mod_cgidso.c
ttp://sunos.saita.ma/dso-example.c

テスト方法:
リモートからabを使用して、対象のマシンに負荷をかける。

テスト結果:
srclib/apr/dso/unix/dso.cの修正前は、apacheが落ちまくって全然駄目だったが、
修正後は一度も落ちなかった。

なので、aprのソースをいじるのも悪くないかもしれません。
474473
垢版 |
2006/03/17(金) 22:49:53ID:pvQ2ZSVI0
書き忘れ。
libpthread, libthr どちらでも落ちませんでした。
2006/03/17(金) 22:56:36ID:T+Aq1Ujm0
>>474
diffかいてうpしればroot先生が滝のような涙を流して?喜ぶでしょうw
476473
垢版 |
2006/03/17(金) 23:20:01ID:pvQ2ZSVI0
--- srclib/apr/dso/unix/dso.c.origSat Feb 5 05:44:01 2005
+++ srclib/apr/dso/unix/dso.cFri Mar 17 23:10:30 2006
@@ -38,6 +38,10 @@
#define DYLD_LIBRARY_HANDLE (void *)-1
#endif

+#if defined(__FreeBSD__)
+static pthread_mutex_t dlmutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
+
APR_DECLARE(apr_status_t) apr_os_dso_handle_put(apr_dso_handle_t **aprdso,
apr_os_dso_handle_t osdso,
apr_pool_t *pool)
@@ -62,6 +66,9 @@
if (dso->handle == NULL)
return APR_SUCCESS;

+#if defined(__FreeBSD__)
+ pthread_mutex_lock(&dlmutex);
+#endif
#if defined(DSO_USE_SHL)
shl_unload((shl_t)dso->handle);
#elif defined(DSO_USE_DYLD)
@@ -69,8 +76,15 @@
NSUnLinkModule(dso->handle, FALSE);
}
#elif defined(DSO_USE_DLFCN)
- if (dlclose(dso->handle) != 0)
+ if (dlclose(dso->handle) != 0) {
+#if defined(__FreeBSD__)
+ pthread_mutex_unlock(&dlmutex);
+#endif
return APR_EINIT;
+ }
+#endif
+#if defined(__FreeBSD__)
+ pthread_mutex_unlock(&dlmutex);
#endif
dso->handle = NULL;

@@ -80,6 +94,9 @@
APR_DECLARE(apr_status_t) apr_dso_load(apr_dso_handle_t **res_handle,
const char *path, apr_pool_t *pool)
{
+#if defined(__FreeBSD__)
+ pthread_mutex_lock(&dlmutex);
+#endif
#if defined(DSO_USE_SHL)
shl_t os_handle = shl_load(path, BIND_IMMEDIATE, 0L);

@@ -139,6 +156,9 @@
os_handle = dlopen(path, flags);
#endif
#endif /* DSO_USE_x */
+#if defined(__FreeBSD__)
+ pthread_mutex_unlock(&dlmutex);
+#endif

*res_handle = apr_pcalloc(pool, sizeof(**res_handle));
477473
垢版 |
2006/03/17(金) 23:22:42ID:pvQ2ZSVI0
単純なものなので、こんな感じです。
2006/03/17(金) 23:46:00ID:0XhMUK1z0
>>464
http://hobby7.2ch.net/test/read.cgi/chakumelo/1138463191/846n-
個人宛だったのはユーザーの紹介があったせいか
■ このスレッドは過去ログ倉庫に格納されています