如何检查特定 TCP 端口上当前打开了多少个连接?

如何检查特定 TCP 端口上当前打开了多少个连接?

我正在做一些彗星基准测试,想看看我有多少个开放的连接。

实际上我使用 netstat:

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

但是列出这个数字大约需要4-6分钟,有没有什么工具可以实时显示它?打开的连接数在100'000-250'000之间。

答案1

不知道是否lsof更好,但可以尝试一下:

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

答案2

如果您只需要查看连接统计信息,请尝试套件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 )'

一些数字底部的部分这一页您可能也感兴趣。

答案3

另一个选择是/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,连接也会显示在那里。

答案4

更容易的是

#netstat -at | wc -l

它将显示系统上的 TCP 连接数...

相关内容