[pgsql-jp: 38497] Re: 切断後もTCPコネクションが残り続ける

YAMANEKO/Mao yneko2 @ yamamaya.com
2007年 6月 15日 (金) 12:01:53 JST


もりもとです

> アプリケーションが原因かと思い、試しにpsqlで接続、切断を行ってみると、
> クライアント側では、FIN_WAIT_2、サーバ側ではCLOSE_WAITの接続が、
> psql終了後も残り続けました。
> (FIN_WAIT_2はしばらくすると消えましたが、CLOSE_WAITは残り続けました。)

CLOSE_WAITやFIN_WAITが残ってしまうのは、
WindowsのTCPの実装上の問題に原因があります。
(TCPのシャットダウンのハンドシェイクに問題があり、
相手OSのTCP実装との相性によっては、ハンドシェイクの途中(CLOSE_WAIT)の
状態で残ってしまうのです。
組込OSのTCPスタックをいじっているとき、このバグに苦労しました。。)

最近の大抵のOSでは、ソケットを所有していたプロセスが終了すると、
まとめて削除されるのですが、データベースのようにずっと生存している
サーバーだとキツイ問題、ですね。。

とりあえず・・・
本当は、WindowsのTCPスタックをチューニングして、
ハンドシェイクの中間状態のタイムアウトを短くするなどできると良いのですが・・
それができなければ、他のOSにするか、
pgpoolなどの、接続プールを用いる方法が妥当ではないでしょうか。。



- YAMANEKO / Mao
http://yamamaya.com/
http://wiki.livedoor.jp/yamamaya_com/




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