CLOSE_WAIT状態の孤立した接続


30

永久に見えるものに対して、CLOSE_WAIT状態のTCP接続を蓄積するSLESマシンを持っています。これらの記述子は、最終的に利用可能なすべてのメモリを使い果たします。現時点では3037個ありますが、最近急いで再起動するまではずっと高くなりました。

おもしろいのは、それらがリッスンプロセスがあると予想されるローカルポートへの接続からではないことです。関連付けられたPIDがなく、タイマーが期限切れになっているようです。

# netstat -ton | grep CLOSE_WAIT
tcp      176      0 10.0.0.60:54882     10.0.0.12:31663      CLOSE_WAIT  off (0.00/0/0)
tcp       54      0 10.0.0.60:60957     10.0.0.12:4503       CLOSE_WAIT  off (0.00/0/0)
tcp       89      0 10.0.0.60:50959     10.0.0.12:3518       CLOSE_WAIT  off (0.00/0/0)

# netstat -tonp | grep CLOSE_WAIT
tcp       89      0 10.0.0.59:45598     10.0.0.12:1998       CLOSE_WAIT  -                   
tcp       15      0 10.0.0.59:60861     10.0.0.12:1938       CLOSE_WAIT  -                   
tcp        5      0 10.0.0.59:56173     10.0.0.12:1700       CLOSE_WAIT  -     

TCPスタックやカーネルネットワーキングに関しては私はブラックベルトではありませんが、マニュアルページによると、これらの値はデフォルトであるため、TCP構成は正気のようです。

# cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time 
7200

それで何が得られますか?タイマーが期限切れになった場合、スタックはこのようなものを自動的にクリアすべきではありませんか?これらの事柄が蓄積するにつれて、私は効果的に長期的なDoSを自分に与えています。


ああ、私の研究では、他の人が「lsof -i」でこのようなアーティファクトを見ていることがわかりました。私はそこに奇妙なものを見ていません
-pboin

2
sudo netstat -tonpこれが発生しているプログラムを確認してください。
-BillThor

1
投稿と私の回答stackoverflow.com/a/17697733/540323が役立ちます。
アミルワドゥワワラ

回答:


16

いいえ、タイムアウトはありませんCLOSE_WAIT。それoffがあなたの出力の意味するところだと思います。

から抜け出すにCLOSE_WAITは、アプリケーションはソケットを明示的に閉じる(または終了する)必要があります。

CLOSE_WAITを解除する方法を参照してください。

プロセス列にnetstat表示さ-れている場合:

  • 適切な特権と機能(たとえば、rootとして)で実行していますか?
  • カーネルプロセス(nfsdなど)

netstatsを行うとき、私は完全な特権を持っていました、はい。カーネルプロセスの角度を確認します。これは良い考えです。2つまたは3つの有名な特権ポートを除いて、リスニングソケットがまったくないはずなので、本当に困惑しています。たぶんそれは奇妙なiptablesの問題でしょう。私もそれをチェックします。
pboin

1
リンクが壊れています。
ネイサン

1
ありがとう、unix.derkeiler.com / Mailing
Mikel

10

CLOSE_WAITクライアントは接続を閉じていますが、アプリケーションはまだ閉じていないか、クライアントが閉じていないことを示します。この問題が発生しているプログラムを特定する必要があります。を使用netstat -tonp 2>&1 | grep CLOSEして、接続を保持しているプログラムを判別してください。

プログラムがリストされていない場合、サービスはカーネルによって提供されています。これらは、次のような可能性の高いRPCサービスですnfsrpc.lockd。リスニングカーネルサービスはでリストできますnetstat -lntp 2>&1 | grep -- -

RPCサービスが固定ポートにバインドされていない限り、接続が表示されるように見えるため、一時ポートにバインドされます。他のサーバーのプロセスとマウントを確認することもできます。

以下を実行することにより、NFSサービスを固定ポートにバインドできる場合があります。

  1. NFS用に4つの未使用ポートを選択します(32763-32766はここで使用されます)
  2. NFSの固定ポートを追加します /etc/services
    rpc.statd-bc 32763 / udp#RCP statdブロードキャスト
    rpc.statd-bc 32763 / tcp
    rpc.statd 32764 / udp#RCP statd listen
    rpc.statd 32764 / tcp
    rpc.mountd 32765 / udp#RPC mountd
    rpc.mountd 32765 / tcp
    rpc.lockd 32766 / udp#RPC lockd / nlockmgr
    rpc.lockd 32766 / tcp
  3. オプションを使用するようにstatdを構成する --port 32763 --outgoing-port 32764
  4. オプションを使用するようにrpcmountdを構成する --port 32765
  5. NFSおよびRPCサービスをシャットダウンして再起動します。

私はPIDがないと書きましたが、私の仕事を見せませんでした。提案ごとに簡単に編集しました、ありがとう。
-pboin

@opboin:PIDS(カーネルサービス)のないポートに関するコメントを追加しました。
-BillThor

3
CLOSE-WAITは、ピアがその終了を閉じ、ローカルOSがローカルアプリケーションの終了を待機していることを意味します。
user207421
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.