2016-06-13 26 views
0

Linux RedHat ES 5サーバーには約500のクライアントが接続されています。 最近、サーバーは、サーバーと通信するアプリケーションを停止することなく再起動されたクライアントとの接続を保持しています。 クライアント上のnetstatは、常に1つの確立された接続のみをサーバに返します。クライアントを再起動すると、確立された新しい接続で通信が実行されます。サーバー側では、古い接続が閉じられていることがあります。状態が確立されているため、各クライアントに対して確立された接続が増えていることがあります。 さまざまなクライアントオペレーティングシステムが影響を受けるため、これはアプリケーションの問題ではなく、サーバーのLinux OSの1つです。 Iは、調整するために成功しなかっ永続的なTCP接続が多すぎます

  • net.ipv4.tcp_keepalive_time = 600
  • net.ipv4.tcp_keepalive_intvl = 10
  • net.ipv4.tcp_keepalive_probes = 9

の値を試してみました。 また、最大ファイルハンドルの値を1024から2048に設定しようとしましたが、TCPキープアライブ時間が経過しても接続が閉じられることはありません。 誰かがその奇妙な行動を引き起こす可能性があるアイデアはありますか?

答えて

1

これらの設定では、キープアライブのデフォルト動作(、キープアライブが有効になっている場合は)を設定できます。ただし、キープアライブは自動化されません。この機能は、ソケットオプションのSO_KEEPALIVEで明示的に有効にする必要があります。

詳細はhttp://tldp.org/HOWTO/TCP-Keepalive-HOWTO/を参照してください。セクション3から:

キープアライブのサポートは、カーネルで構成されていても、Linuxではデフォルトの動作ではないことに注意してください。プログラムは、setsockoptインターフェイスを使用してソケットのキープアライブ制御を要求する必要があります。

+0

こんにちは、あなたの答えをありがとう! 私はTIMED_WAIT状態でのみ接続のkeepaliveパラメータが機能すると思いますが、接続は確立されたままです。 クライアントがFINなどを送信する前にシャットダウンしているため、サーバーが接続を閉じる信号を受け取っていないようです。しかし、どうすればそれを避けることができますか? – Airogat

+0

番号キープアライブは、ESTABLISHED状態の接続をシャットダウンするためのものです。しかし、それを有効にする必要があります。 –