サーバーと通信しようとすると問題が発生します。
コマンドラインを使用する場合:
netstat -np 10.aaa.bbb.12
ここで、10.aaa.bbb.12はサーバーアドレスを示します。次の結果の抽出物が得られます。
tcp 0 87 10.xxx.yyy.4:59438 10.aaa.bbb.12:7955 FIN_WAIT1 -
tcp 0 87 10.xxx.yyy.4:36100 10.aaa.bbb.12:7952 FIN_WAIT1 -
tcp 0 87 10.xxx.yyy.4:59422 10.aaa.bbb.12:7955 FIN_WAIT1 -
tcp 0 87 10.xxx.yyy.4:41678 10.aaa.bbb.12:7951 FIN_WAIT1 -
tcp 0 87 10.xxx.yyy.4:60999 10.aaa.bbb.12:7953 FIN_WAIT1 -
tcp 0 86 10.xxx.yyy.4:59456 10.aaa.bbb.12:7955 ESTABLISHED 21203/sender
tcp 0 87 10.xxx.yyy.4:41694 10.aaa.bbb.12:7951 FIN_WAIT1 -
tcp 0 87 10.xxx.yyy.4:36084 10.aaa.bbb.12:7952 FIN_WAIT1 -
tcp 0 87 10.xxx.yyy.4:60966 10.aaa.bbb.12:7953 FIN_WAIT1 -
tcp 0 87 10.xxx.yyy.4:41711 10.aaa.bbb.12:7951 FIN_WAIT1 -
tcp 0 86 10.xxx.yyy.4:32783 10.aaa.bbb.12:7953 ESTABLISHED 21269/sender
tcp 0 87 10.xxx.yyy.4:60983 10.aaa.bbb.12:7953 FIN_WAIT1 -
tcp 0 86 10.xxx.yyy.4:41728 10.aaa.bbb.12:7951 ESTABLISHED 21225/sender
tcp 0 86 10.xxx.yyy.4:36118 10.aaa.bbb.12:7952 ESTABLISHED 21247/sender
FIN_WAIT1のポートはこの状態になります1日以降。理由がわかりません。
上記の状態のすべてのサーバーポートは接続を受け入れ、サーバーはコマンドを受け入れているようですが、サーバーは期待どおりに応答しません。サーバーから待機したすべての応答はタイムアウトになります。
このコマンドラインを使用して、サーバーとの接続を確認できます。
nc 10.150.224.12 7955 -w 10 <ts.txt
ファイルts.txtに、既知の特定の応答を必要とするコマンドが含まれている場合。
これは、サーバーがクライアントとアクティブな接続を持ち、TCP接続をシャットダウンしたい場合に発生するようです(おそらく通常のアプリケーション層の「終了」に応答して)。サーバーはクライアントを送信します。 「FIN」ビットが設定されたパケット。この時点で、サーバーはFIN_WAIT_1
状態にあります。クライアントがFINパケットを取得すると、クライアントはCLOSE_WAIT状態になり、確認応答パケットをサーバーに送り返します。 FIN_WAIT_2
状態になります。
これは、クライアントがTCPソケットを正常にシャットダウンせずにドロップオフしていることを意味します。
最善の解決策は、アプリケーションを修正することです。
即時の一時的な解決策は、これを実行することです ServerFaultスクリプト :
# record what tcp_max_orphans's current value
original_value=$(cat /proc/sys/net/ipv4/tcp_max_orphans)
#set the tcp_max_orphans to 0 temporarily
echo 0 > /proc/sys/net/ipv4/tcp_max_orphans
# watch /var/log/messages
# it will split out "kernel: TCP: too many of orphaned sockets"
# it won't take long for the connections to be killed
# restore the value of tcp_max_orphans whatever it was before.
echo $original_value > /proc/sys/net/ipv4/tcp_max_orphans
# verify with
netstat -an|grep FIN_WAIT1
また、/proc/sys/net/ipv4/tcp_Orphan_retries
にある tcp_Orphan_retries を設定して、これらのソケットがこの状態に留まる時間を短縮することもできます。 0
の値は実際には8
を意味することに注意してください。
しかし、繰り返しになりますが、最善の解決策は、アプリケーションを修正して適切に閉じることです。