相信各位系统管理员在做压力测试或者是服务器处于高并发情况下,想了解网络连接的状态时候,经常会使用netstat命令去统计服务器目前的网络连接状态,而在国内使用最多的莫过于下面这条shell语句: netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 而使用过这个语句的都知道,执行速度太慢,在一个tcp连接查过3W的机器上,笔者执行这句话时间差不多20秒,要是连接再多点的情况下就更慢了,而且它本身消耗的CPU资源也过多,而作为做系统调优或者是高并发情况下找系统的瓶颈点,错过一秒也许再重现这个场景就很难了。从技术层面上来讲,linux各种统计信息都是通过/proc来获取的,当处理tcp时候用到了一个tcp_diag的功能,什么事tcp_diag呢?tcp_diag是用于诊断和统计tcp协议信息的一个模块。而ss正是采用这个模块实现它的统计速度飞快的原因,下面说说它跟netstat实现相同功能的具体用法: netstart -nat #统计所有的TCP连接 ss -t -a #统计所有的TCP连接 netstart -nau #统计所有的UDP连接 ss -u -a #统计所有的UDP连接 ss还具有过滤功能,下面列一下常用的功能: ss state ESTABLISHED #列出所有ESTABLISHED状态的连接 ss -t -a -o excl ESTABLISHED #排除所有ESTABLISHED状态的连接 ss state ESTABLISHED sport eq :80 #列出所有在80端口上状态为ESTABLISHED状态的连接 ss state ESTABLISHED sport eq :80 and not dst 127.0.0.1 #列出所有在80端口上状态为ESTABLISHED状态和目的地址不为127.0.0.1的连接 上面只是一些简单的例子,而我在使用过程中,发现它在大连连接的情况下,统计速度快很多,值得向各位推荐使用。另外根据他自己的介绍页面介绍说统计一个3Wsockets连接,采用netstat统计时间需要15.6秒,而采用ss只需要0.47秒。