[pgsql-jp: 33741] Re: usogresでzombie プロセス
Kenichirou Kimura (木村健一郎)
kimura @ project-com.com
2004年 7月 23日 (金) 10:36:32 JST
木村と申します。
At 23 Jul 2004 04:28:18 +0900,
<hogehoge77 @ excite.co.jp> wrote:
>
> 吉村と申します。
>
> usogresを使ってレプリケーションをしているのですが、
> psqlやPHPからWEB経由で接続していると、
> ps -ax|grep usogres
> で
> 80613 p0 Z 0:00.00 (usogres)
> 80620 p0 Z 0:00.00 (usogres)
> 80622 p0 Z 0:00.00 (usogres)
> 80624 p0 Z 0:00.00 (usogres)
> 80626 p0 Z 0:00.00 (usogres)
> 80628 p0 Z 0:00.00 (usogres)
> 80655 p0 Z 0:00.00 (usogres)
> 80682 p0 Z 0:00.00 (usogres)
> 80706 p0 Z 0:00.00 (usogres)
> 80739 p0 Z 0:00.00 (usogres)
> 80764 p0 Z 0:00.00 (usogres)
>
> とゾンビなプロセスがどんどん増えてしまいます。
> 何か情報はございませんでしょうか。
> よろしくお願い致します。
これ、私も使っていて気が付きました。要はusogresがforkした子プロセスの
終了をwaitしてないので、接続 → 切断が繰り返されるとどんどんゾンビプロ
セスがたまるようです。
で、適当にパッチをでっち上げてこれで1年ばかり運用してますが問題は起こっ
てないようなので以下のパッチを試していただけますか?ifdef WIN32辺りの
ことを気にせずにFreeBSDで動けばいいや...と作ったので環境によっては動か
ないかもです。
#作者に報告するのをすっかり忘れてた...
--- usogres.cc Mon Apr 15 22:00:51 2002
+++ usogres.cc.patched Fri Jul 23 10:28:54 2004
@@ -433,6 +433,7 @@
int main(int argc, char* argv[])
{
+ int status;
#ifdef WIN32
int Err;
WSADATA WsaData;
@@ -498,6 +499,7 @@
sleep(1);
#ifndef WIN32
} else if (pid == 0) {
+ if(fork() == 0){
sock_serv.close();
#else
} else {
@@ -525,9 +527,14 @@
post_obj.open();
post_obj.post();
exit(0);
+ } else {
+ exit(0);
+ }
} else {
sl_obj.printf("fork() : ok");
new_sock.close();
+ while(wait(&status) !=pid);
+
#endif
}
}
-----------------------------------------------------------------------
木村健一郎(Ken'ichirou Kimura)
pgsql-jp メーリングリストの案内