サーバがテスト用プログラムで、IEがクライアントの直接接続、という認識で間違いないでしょうか。
サーバ側はaccept()を一回しかしていない、クライアントは(IEで更新を連打して)サーバに対してソケットをいっぱい張っている、ということですからaccept()されてないソケットたちがbacklog越えてしまってSYN_RECVなソケットができる、という状況のように読めます。ここまでは単に「テスト用プログラム」の不具合に見えますが、これは意図的にそういう状況をテストしたい、という意味で行っているのでしょうか?
SO_LINGERの設定によりCPUが回ってしまう、という現象の理由は今のところ見えないのですが、上記を直して発生しなくなるのであればそれで良い、ということであれば深追いする必要は無い気がします。SO_LINGERについてはとりあえず以下のURLなどを参照してみてください。
http://docs.oracle.com/javase/7/docs/api/java/net/SocketOptions.html#SO_LINGER
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/socket.7.html
Socket#setSoLinger()のパラメータはドキュメントの通りひとつめがon/off、ふたつめがタイムアウトです。これ自体はOSごとに意味が異なるということはないと思います。
http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setSoLinger%28boolean,%20int%29
Regards,
Takayoshi
> サーバがテスト用プログラムで、IEがクライアントの直接接続、という認識で間違いないでしょうか。
まちがいないです。
> サーバ側はaccept()を一回しかしていない、クライアントは(IEで更新を連打して)サーバに対してソケットをいっぱい張っている、ということですからa ccept()されてないソケットたちがbacklog越えてしまってSYN_RECVなソケットができる、という状況のように読めます。ここまでは単に「テス ト用プログラム」の不具合に見えますが、これは意図的にそういう状況をテストしたい、という意味で行っているのでしょうか?
意図的に作っています。
本当に調べたいプログラムは別にあるのですが、仕様の開示が
行われないプログラムなのです。
逆〇〇〇〇〇して中身を見て見よう見まねで作成しました。
> SO_LINGERの設定によりCPUが回ってしまう、という現象の理由は今のところ見えないのですが、上記を直して発生しなくなるのであればそれで良い、とい うことであれば深追いする必要は無い気がします。
上記の通り、ホントの調査対象のプログラムは簡単に変更できないです。
> SO_LINGERについてはとりあえず以下のURLなどを参照してみてください。
ありがとうございます。
調べてみます。
> Socket#setSoLinger()のパラメータはドキュメントの通りひとつめがon/off、ふたつめがタイムアウトです。これ自体はOSごとに意味が 異なるということはないと思います。
そうですかぁ。。
となると、ますます謎が深まるばかりです。(笑)
また何かわかれば教えてください。
参考になることも多く、大変助かります。
2012/3/8 Billiards Sanchan <sugi...@tb4.so-net.ne.jp>:
> 意図的に作っています。
> 本当に調べたいプログラムは別にあるのですが、仕様の開示が
> 行われないプログラムなのです。
なるほど、ありがちなシチュエーションですね。現象からすると問題はHP-UXのカーネルやHP-UXのJavaの要素が強いですね。LinuxやOpenJDKだとソース追えばそこそこは調査できると思いますが、僕はHP-UXはほとんど触ったことがないですしHP-UXはオープンソースでもないのでどうにも手出しできないですね。
HP-UXのサポートにテストプログラムを渡してなぜそうなるのかを聞くのが良いと思います。
Regards,
Takayoshi
Senior Software Maintenance Engineer, Red Hat