获取系统上当前的 TCP 连接数

获取系统上当前的 TCP 连接数

除了这样做之外wc -l /proc/net/tcp,还有更快的方法吗?

我只需要 TCP 连接总数。

答案1

如果您只想获取号码而不需要任何详细信息,您可以从 读取数据/proc/net/sockstat{,6}。请记住,您必须组合这两个值才能获得连接的绝对计数。

如果你想从内核本身获取信息,你可以使用 NETLINK_INET_DIAG从内核获取信息,而不必从内核读取信息/proc

答案2

更快的方法?这种方式只需不到一秒就能得出答案,事实上在我的计算机上只需要 0.009 秒!

您是否正在寻找一种需要更少打字的方法?在这种情况下设置一个别名,例如

alias tcpcount="wc -l /proc/net/tcp"

您现在只需输入别名(例如tcpcount我在示例中使用的别名)即可获取此号码。

输入该行或将其添加到您的 .bashrc 中,以便您每次登录时都会定义别名。

对于大量连接,以下命令可能运行得更快一些(对于非常少量的连接,运行速度可能会稍微慢一些):

#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)

或者可能 ...

awk 'END {print NR}' /proc/net/tcp

这两种解决方案都假设“wc”对于仅计算行数来说并不是最佳选择。我的测试表明这个假设是正确的。

第一个工作的前提是 tail 命令确实擅长丢弃不需要的数据,以至于它弥补了创建额外的子 shell 和对环境变量进行额外工作的不足。它利用 /proc/net/tcp 中的行已经编号的事实来消除对行进行计数的需要。最终的解决方案假设 awk 足够好,可以抵消由于加载更大的程序与创建多个进程而导致的任何缺点。 awk 解决方案还有一个额外的好处,即它非常适合简单的单行别名定义(这提供了额外的好处,因为没有调用脚本,因此没有额外的 shell 进程分叉,从而提供了额外的毫秒优势。)

答案3

使用ss -s命令来获取详细答案。

相关内容