在Linux服务器上,可以使用netstat -tan | grep ESTABLISHED| wc -l netstat -tan | grep ESTABLISHED| wc -l netstat -tan | grep ESTABLISHED| wc -l但是这对于使用watch -n1的高负载服务器不起作用。
如果服务器不是很忙或者监视间隔足够大的话,这种方法可以正常工作。 但是什么可以推荐作为高负载服务器的替代品?
使用命令:
ss -neopt state established
这将只显示在ESTABLISHED状态下的TCP会话,不需要其他命令pipe道,所以它超快。
ss比netstat更好,因为旧的netstat只是读取受文件locking的procfs。 ss实际上在内核调度程序处理的内核中进行查询,总是返回准确的信息。
还请检查: 527875 。
netstat + grep对于一些连接来说是一个很好而简单的select,但是如果你有大量的连接,我会推荐在nixCraft中使用ss 。
例如: ss -s
Total: 78 (kernel 79) TCP: 31 (estab 27, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 16 Transport Total IP IPv6 * 79 - - RAW 0 0 0 UDP 4 2 2 TCP 31 2 29 INET 35 4 31 FRAG 0 0 0
ss是一个很好的工具。 对于踢你也可以只是:
[kbrandt@ny-kbrandt01: ~] cat /proc/net/snmp | grep Tcp | awk '{print $10}' CurrEstab 3
还有lsof,它可以按协议和状态过滤:例如查找TCP ESTABLISHED连接:
~# lsof -i tcp -s tcp:ESTABLISHED
那么| wc -l来算。 注意:没有尝试大量连接的成本。
我喜欢通过/proc直接访问内核variables 。 这是非常有效的,快速和系统友好。
有一个名为/proc/net/tcp的伪文件(内核variables表),其中有TCP连接和侦听的内核存储列表。 名为st的第6个字段可以包含0A的监听条目, 01代表已build立的连接。
计数TCP build立的连接:
通过使用grep
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
通过使用awk
awk </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'
要么
awk </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'
通过使用sed
sed </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l
由于这个问题代表了高工作量系统。 我做了一个小长凳:
方法通过毫秒回答 grep Techno 2.48 awk没有正则expression式($ 4 ==“01”)2.51 sed | wc 2.67 awk与正则expression式2.93 ss -neopt状态成立| wc -l Suprjami 15.14 lsof -i tcp -s tcp:ESTABLISHED Tonioc 25055.00
Ok Tonioc的回答非常缓慢,但是由于他的详细程度,他的回答非常有趣。 所以显然不适用于高工作量的系统。
这个工作台让你看到,如果ss是一个非常有用的专用工具,那么询问/procvariables可能会更快。