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

Tatsuo Ishii ishii @ sraoss.co.jp
2007年 6月 20日 (水) 17:07:44 JST


石井です.

以前浅羽君に一度指摘されてすっかり忘れていたのですが,問題の本質はfork 
云々ではなく,シグナルハンドラの中で安全に呼び出せない関数を使っていた
ことでした.

すでに浅羽君が「シグナルハンドラの中では余計なことをしない」方針できっ
ちり修正を入れてくれているので,まもなくコミットされると思います.
--
Tatsuo Ishii
SRA OSS, Inc. Japan

> 鹿持@メダカカレッジです。
> 
> ども。
> 過去の ML で書いてた者です。
> 最近の pgpool はおっかけてないのですが、2.5 系列を現在も使ってます。
> 
> At Tue, 19 Jun 2007 23:28:05 +0900,
> TAKAO Kouji wrote:
> 
> > ある程度pgpoolを動かし続けていると、pgpoolのプロセスがささり、未接続の
> > pgpoolの子プロセスがゾンビ状態になる現象が発生しています。3日で発生す
> > ることもあれば、1ヶ月なこともあり、とりあえず、1日1回pgpoolを再起動さ
> > せるようにして、その場をしのいでいます。
> [snip]
> > 上記を元に、シグナルハンドラの中で、forkしている可能性があると思い、ソー
> > スコードを確認しました。すると、main.cにSIGCHLDのシグナルハンドラで
> > forkしていることが分かりました。
> > 
> > ----- ここから -----
> > ...
> >     pool_signal(SIGCHLD, reap_handler);
> > ...
> > static RETSIGTYPE reap_handler(int sig)
> > {
> > ...
> >     /* if found, fork a new child */
> >     if (!switching && !exiting && status)
> >     {
> >         pids[i] = fork_a_child(unix_fd, inet_fd);
> >         pool_debug("fork a new child pid %d", pids[i]);
> >         break;
> >     }
> > ...
> > }
> > ----- ここまで -----
> > 
> > 今回、私の環境で発生したpgpoolがささり、子プロセスがゾンビになる現象は、
> > シグナルハンドラ中でforkしていることが原因ではないかと想像しています。
> 
> やっぱりここ気持ちわるいんですよね。
> 自分は子プロセスが、しばらくアクセスがこなかったのしても、
> 自動的に死なないようにハックして使ってます。
> ようするに、ここに来る前で止めてる感じ。
> 
> > > そして、子 pgpool の看取りは waitpid(WNOHANG) でやっていますし、
> > > 子の再起動のための fork_a_child(reap_handler)を signal handler から
> > > 呼ぶのではなく、main() のメインループの中から定期的にキックするようにする、
> > > というアイディアもあると思うんですがいかがでしょう?
> > とりあえずこちらの方向で検討します.heal checkを動かしているときに,起
> > 動するタイミングを探すのがちょっと微妙ではありますが.
> > ----- ここまで -----
> > 
> > 上記はかなり前の話しなので、修正されているのかなと思っていましたが、
> > ソースコードを確認したところ、現在も同様の状態だと考えています。
> > 「main() のメインループの中から定期的にキックするようにする」というの
> > は、どうなのでしょうか。何か難しい点や、問題などがあったのでしょうか。
> 
> 浅羽さんがコメントしてくださっていますが、自分もシグナルハンドラの中では
> フラグセットだけにするのが好ましいと思ってまして、
> ここのロジックが変更されることに期待です。
> 
> # コード書かずに要望言うだけで恐縮なんですが。。。^^;
> 
> 
> ● from: KAJI Wataru <waasuke @ medaka-college.com>
> ● 鹿持 渉 @ メダカカレッジ
>http://www.medaka-college.com/



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