web-dev-qa-db-ja.com

TCP確立された接続の数を取得します

Linuxサーバーではnetstat -tan | grep ESTABLISHED| wc -lを使用できますが、これはwatch -n1の高負荷サーバーでは機能しません。

サーバーがあまりビジーでない場合、または監視間隔が十分に長い場合、このようなアプローチはうまく機能します。しかし、高負荷サーバーの代替として何を推奨できますか?

7
Tinti

次のコマンドを使用します。

ss -neopt state established

これは、TCP ESTABLISHED状態のセッションのみを表示します。他のコマンドへのパイプは不要なので、超高速です。

古いssは、ファイルロックの影響を受けるprocfsから読み取るだけなので、netstatnetstatより優れています。 ssは、カーネルスケジューラによって処理されるカーネル内で実際にクエリを実行し、常に正確な情報を返します。

7
suprjami

また確認してください: 527875

netstat + grepは少数の接続に適したシンプルなオプションですが、接続数が非常に多い場合は nixCraft で推奨されているssをお勧めします。

例えば: ss -s

Total: 78 (kernel 79)
TCP:   31 (estab 27, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 16

Transport Total     IP        IPv6
*     79        -         -        
RAW   0         0         0        
UDP   4         2         2        
TCP   31        2         29       
INET      35        4         31       
FRAG      0         0         0  
3
Tinti

ssは優れたツールです。キックの場合は、次のこともできます。

[kbrandt@ny-kbrandt01: ~] cat /proc/net/snmp | grep Tcp | awk '{print $10}'
CurrEstab
3
1
Kyle Brandt

プロトコルと状態ごとにフィルタリングできるlsofもあります。たとえば、TCP ESTABLISHED接続を探すには:

~# lsof -i tcp -s tcp:ESTABLISHED

その後|カウントするwc -l。注:接続の数が非常に多い場合は、このコストを試さなかった。

1
tonioc