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


8

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

实际上我使用netstat:

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

但是列出数字大约需要4-6分钟,是否有任何工具可以实时显示该数字?开放连接的数量在100'000-250'000之间。


根据您要完成的工作,您是否考虑过使用NetFlow和分析器工具?
SpacemanSpiff

@SpacemanSpiff我希望有一些简单的解决方案,但是我将看看NetFlow,因为我不确定是否正在使用HP交换机。
内纳德(Nenad)

您知道吗,我想知道perfmon或WMI查询是否可能更快地将这些数据从TCP堆栈中移回...仍然...是在打开端口或进行活动数据传输之后?
SpacemanSpiff

@SpacemanSpiff我以后开放的端口找我
雷纳德-

也许是SNMP查询?...只是为您抛出一些想法。
SpacemanSpiff

Answers:


8

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

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

实际上lsof需要5秒钟,但我有20'000个连接并在计数:-)将让您知道通过100K之后多长时间
Nenad

更新:与我们的彗星客户端有关的一些问题,但是lsof对于30,000个连接来说要快10秒,将在我解决了彗星问题并能够检查10万个以上连接后更新
Nenad

更新:15秒显示130'000个连接-谢谢!对于我来说,这项工作为使用网络分析仪提供了更详细的解决方案。
内纳德(Nenad)

太好了!您也可以使用开关-t-也许这也可以给您带来一点帮助。
ThorstenS

5

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

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


+1未使用已弃用的netstat
Joshua Griffiths

我知道这是六年前的事,但是您或其他任何人是否有链接到分解SS状态输出的内容。我特别想知道TCP行末的端口数。我正在做两台充当负载平衡器的服务器之间的比较测试,其中一台的端口数徘徊在1000左右,而另一台的端口数始终为0。具体是什么计数?
RobertRSeattle

1
@RobertRSeattle由ss源代码提供,似乎该数字是从文件tcp_bind_bucket行读取的/proc/slabinfo。您可能要比较awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfo两个服务器之间的输出。可以在内核源代码中的某处找到更多详细信息。
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.