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

前端之家收集整理的这篇文章主要介绍了linux – 获取TCP建立连接的数量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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变量可以更快.

猜你在找的Linux相关文章