web-dev-qa-db-ja.com

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

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

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

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

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

8
Nenad

lsofの方が良いかどうかはわかりませんが、試してみてください。

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

接続の統計情報を確認するだけの場合は、ssスイートのiprouteユーティリティを試してください。

# 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 )'

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

5
artyom

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

$ 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を使用している場合でも接続が表示されます。

1
jon

より簡単です

#netstat -at | wc -l

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

0
user162048