[pgsql-jp: 38519] Re: pgpoolがささり、子プロセスがゾンビになる現象が発生

Yoshiyuki Asaba y-asaba @ sraoss.co.jp
2007年 6月 20日 (水) 18:16:35 JST


浅羽です。

From: Yoshiyuki Asaba <y-asaba @ sraoss.co.jp>
Subject: [pgsql-jp: 38516] Re: pgpoolがささり、子プロセスがゾンビになる現象が発生
Date: Wed, 20 Jun 2007 10:12:09 +0900 (JST)

> > 上記はかなり前の話しなので、修正されているのかなと思っていましたが、
> > ソースコードを確認したところ、現在も同様の状態だと考えています。
> > 「main() のメインループの中から定期的にキックするようにする」というの
> > は、どうなのでしょうか。何か難しい点や、問題などがあったのでしょうか。
> 
> はい、おっしゃる通り、シグナルハンドラ内でフラグをセットするだけで、メ
> インループ内でフラグをチェックして処理を起動するのが一番安全です。
> 
> どのポイントだと遅延もなく安全にシグナルを配送できるかを検討してみます。

fork() 処理をシグナルハンドラから起動しないように修正しました。以下の
パッチを当ててみてください。

http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/pgpool/pgpool/main.c.diff?r1=1.16&r2=1.18&f=u

以下のようなバックトレースになります。

  #0  0xffffe410 in __kernel_vsyscall ()
  #1  0xb7e30c6d in select () from /lib/libc.so.6
  #2  0x0804e401 in do_accept (unix_fd=3, inet_fd=4, timeout=0xbfad65a0)
      at child.c:591
  #3  0x0804d7d4 in do_child (unix_fd=3, inet_fd=4) at child.c:177
  #4  0x0804b95a in fork_a_child (unix_fd=3, inet_fd=4, id=0) at main.c:700
  #5  0x0804d2a3 in reaper () at main.c:1362
  #6  0x0804aca2 in main (argc=5, argv=0xbfada844) at main.c:388

--
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp



pgsql-jp メーリングリストの案内