加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 获取TCP建立连接的数量

发布时间:2020-12-13 17:08:47 所属栏目:Linux 来源:网络整理
导读:在 Linux服务器上,可以使用netstat -tan | grep ESTABLISHED | wc -l但这不适用于带有-n1的高负载服务器. 如果服务器不是很忙或者监视间隔足够大,这种方法可以正常工作.但是什么可以被推荐作为高负载服务器的替代品? 解决方法 使用/ proc减少工作量 我喜欢
在 Linux服务器上,可以使用netstat -tan | grep ESTABLISHED | wc -l但这不适用于带有-n1的高负载服务器.

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

解决方法

使用/ proc减少工作量

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

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

计算TCP建立的连接:

通过使用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

执行时间处理时间

由于这个问题代表高工作负载系统.我做了一个小板凳:

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变量可以更快.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读