[pgsql-jp: 34738] Re: pgpoolが無応答になる

Kouji Ito kouji @ cty-net.ne.jp
2005年 1月 28日 (金) 01:52:47 JST


伊藤です。
このトレースは、pgpoolのトレースで良いのでしょうか?

ごめんなさい、とりあえず、pgpoolのソースは読まずに話しています。

accept(2)が、EAGAINを返してきてるんですね。
select(2)に、4番と5番のファイルディスクリプタを渡していて、
接続があったから、select()から抜けて、5番のファイルディスクリプタ
を渡して、accept()を呼んだところで、
accept()が、-1を返して、そのときのerrnoが、EAGAINという事は、

http://www.linux.or.jp/JM/html/LDP man-pages/man2/accept.2.html

によると、
accept()に渡しているファイルディスクリプタが間違っている(本当は4番を
渡さないといけないとか)ってことになるのかなぁ。(Linixのacceptは、BSDソケット
の実装とは異なるって上記ページに書いてあるのがかなり気になります。)

accept()に渡しているファイルディスクリプタが間違っているとすると、
select()が、返してきているfd_setが間違っているか、その後の
アプリ側での、ファイルディスクリプタのチェックが間違っている、
アプリ側で、fd_setを壊しているぐらいでしょうか。
いずれも、可能性としては低そうですね。

Linuxには詳しくないのであまり突っ込んだ話が出来ないのですが、
select(),accept()あたりに関するカーネルパッチとか出てないんでしょうか?
接続したとたんに、相手がclose()したり、ハーフオープンな接続があった
時とかのLinuxのselect(),accept()ってどう動くんでしょう?

ロジック上問題がないとすると、tcpdumpなどで、LANのトレースを取る必用が
あるかもしれません。



On 2005/01/27, at 20:19, naruse @ daikodenshi.co.jp wrote:

> 成瀬です。
>
> 現象発生時のstraceの取得ができました。
> CPU使用率の高いプロセスは刻一刻とかわっていくのですが、下記のような情報が取得
> できました。
> 2秒位で下の量になります。
> 私の知識では下記から何が発生しているのか読み取れませんでした。。。
>
> select(6, [4 5], NULL, NULL, {0, 760000}) = 1 (in [5], left {0, 
> 690000})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 1 (in [5], left {0, 970000})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 0 (Timeout)
> select(6, [4 5], NULL, NULL, {1, 0})    = 0 (Timeout)
> select(6, [4 5], NULL, NULL, {1, 0})    = 1 (in [5], left {1, 0})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 1 (in [5], left {0, 790000})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 1 (in [5], left {0, 840000})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 0 (Timeout)
> select(6, [4 5], NULL, NULL, {1, 0})    = 0 (Timeout)
> select(6, [4 5], NULL, NULL, {1, 0})    = 1 (in [5], left {0, 990000})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 1 (in [5], left {1, 0})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 1 (in [5], left {0, 950000})
> accept(5, 0xbfffc770, [16])             = -1 EAGAIN (Resource 
> temporarily
> unavailable)
> select(6, [4 5], NULL, NULL, {1, 0})    = 0 (Timeout)
> select(6, [4 5], NULL, NULL, {1, 0})    = 0 (Timeout)
>
>
>
>
>




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