Answers:
如果您只是想获取数字并且不需要任何详细信息,则可以从中读取数据/proc/net/sockstat{,6}
。请记住,必须将两个值组合起来才能获得连接的绝对计数。
如果要从内核本身获取信息,可以使用 NETLINK_INET_DIAG
从内核获取信息,而不必从内核中读取信息。/proc
更快的方法?这样一秒钟之内就能得到答案,实际上在我的计算机上花费了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进程,从而提供了额外的毫秒级优势。)
/proc/net/tcp
。您可以尝试netstat -n -t | wc -l
,但我的猜测是netstat的内容也来自/proc/net/tcp
netstat -nt
大约180.000个连接。我认为没有理由为什么它应该这么慢...(阅读/proc/net/tcp
也很慢)
awk
方法比慢得多wc
。tail
似乎与wc
。
ss -s