获取TCP建立连接的数量

Modified on: Thu, 19 Sep 2019 13:20:02 +0800

在Linux服务器上,可以使用netstat -tan | grep ESTABLISHED| wc -l

如果服务器不是很忙或监控间隔足够大,这种方法可以正常工作。但是什么可以作为高负载服务器的替代推荐?

最佳答案

使用/ proc减少工作量

我喜欢直接通过/proc访问内核变量。这非常有效,快速且系统友好。

有一个名为/proc/net/tcp的伪文件(内核变量表)
内核存储TCP连接和监听列表。 state 的第6个字段( st )可以包含0A,用于监听条目和01用于已建立的连接。

计算TCP 建立的连接:

使用

grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '

使用

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  </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l

执行时间

因为这个问题代表高工作负载系统。我做了一个小板凳:

Method                                Answer by     Milliseconds

grep                                  Techno        2.48
awk no regexp ($4=="01")                            2.51
sed | wc                                            2.67
awk with regexp                                     2.93

ss -neopt state established | wc -l   Suprjami     15.14
lsof -i tcp -s tcp:ESTABLISHED        Tonioc    25055.00

好的Tonioc的答案非常缓慢,但他的冗长非常感兴趣。所以在高工作负载系统上显然无法使用。

这个工作台让你看到如果ss是一个非常有用的专用工具,那么要求/proc变量可以更快。

作者:,techno

相关问答

添加新评论