特定のTCPポートで現在開いている接続の数を確認するにはどうすればよいですか?


8

私はいくつかの彗星のベンチマークを行っています、そして私が持っているオープンコネクションの数を知りたいです。

実際、私はnetstatを使用しています:

netstat -ant | grep 8080 | grep EST | wc -l

しかし、数をリストするのに約4〜6分必要です。リアルタイムで表示できるツールはありますか?開いている接続の数は100'000〜250'000です。


達成しようとしていることに基づいて、NetFlowとアナライザーツールの使用を検討しましたか?
SpacemanSpiff、2011

@SpacemanSpiff簡単な解決策があるといいのですが、HPスイッチで動作しているかどうかわからないため、NetFlowを調べます。
Nenad 2011

perfmonまたはWMIクエリがこのデータをTCPスタックからより高速に戻す可能性があるのか​​と思いますが、それでも...ポートを開いた後か、アクティブなデータ転送の後ですか?
SpacemanSpiff、2011

@SpacemanSpiff私が探して開いているポートの後だ
ネナド

たぶんSNMPクエリ?...あなたのためのアイデアを捨てるだけです。
SpacemanSpiff

回答:


8

lsofどちらが良いかわからないが、これを試してみてください:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l

実際にlsofを5秒を取るが、私は20,000の接続を持っているとカウントは:-)あなたが長い後に100K渡す方法をお知らせします
ネナド

更新:コメットクライアントにいくつかの問題がありますが、lsofは30'000接続で10秒とはるかに高速です。コメットの問題を修正し、100Kを超える接続を確認できた後に更新されます
Nenad

更新:15秒で130'000の接続を表示-ありがとう!これは、ネットワークアナライザーを使用する必要があるより詳細なソリューションのために私のために仕事をします。
Nenad 2011

素晴らしい!また、スイッチを使用することもできます-t-おそらく、これにより少しブーストも得られます。
ThorstenS 2011

5

接続統計情報を表示するだけの場合はssiprouteスイートからユーティリティを試してください。

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

次のように、確立されたすべての接続に関する詳細情報を表示することもできます。

ss -n state established

…またはssh接続のみ:

ss -n state established '( dport = :ssh or sport = :ssh )'

このページの下部にあるいくつかの数値セクションも興味深いかもしれません。


廃止されたnetstatを使用しない場合の+1
Joshua Griffiths

私はこれが6年前のものであることを知っていますが、あなたまたは他の誰かがssステータス出力を分解する何かへのリンクを持っていますか?TCP回線の最後のポート数に特に興味があります。ロードバランサーとして機能する2つのサーバー間でいくつかの比較テストを行っています。一方のポート数は約1000で、もう一方のポート数は常に0です。具体的には、その数は何ですか。
RobertRSeattle

1
@RobertRSeattleのssソースコードでは、この番号はファイルのtcp_bind_bucket行から読み取られたよう/proc/slabinfoです。awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfo2つのサーバー間で出力を比較したい場合があります。詳細はカーネルソースのどこかで見つかる可能性があります。
artyom

1

別のオプションは、/proc/net/tcp直接読むことです。8080で確立されたすべてのTCP接続を確認するには、次のようにします。

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

単一のプロセス(IOオーバーヘッドが少ない)でそれを実行し、コーナーケースを処理する場合は、次のようにESTABLISHED TCP接続の数がローカルポート8080であることがわかります。

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

8080でリッスンするマシンのソフトウェアがIPv6をサポートしている場合は、/proc/net/tcp6こちらもお読みください。プログラムがIPv6ソケットを使用している場合は、IPv4を使用している場合でも接続が表示されます。


0

より簡単です

#netstat -at | wc -l

システム上のTCP接続の数を表示します...


「n」フラグを使用してすべてのホスト名を検索しないようにするため、これにはさらに時間がかかります。また、問題となったポート8080接続以外の情報も表示されます。
ジェニーD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.