我正在做一些彗星基准测试,想看看我有多少个开放的连接。
实际上我使用 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 连接数...