很多Linux工程师第一次接触网络排查时,用的都是netstat
但当服务器连接数达到 几万甚至几十万 时,你会发现:
netstat 执行非常慢
CPU 占用飙升
有时甚至卡住
于是 Linux 内核团队提供了一个现代工具:ss
ss 可以:
它属于 iproute2 工具集。
这篇文章会带你从 基础 → 原理 → 实战 → 性能排障 全面掌握 ss。
一、为什么 ss 比 netstat 快?
传统 netstat 的工作方式:
/proc/net/tcp/proc/net/udp/proc/net/unix
每次执行:
读取 /proc
解析文本
格式化输出
当连接数很大时:
10万 socket= 10万行文本= 解析巨大字符串
而ss直接通过 netlink 向内核请求数据:
ss -> netlink -> kernel socket table
优点:
因此性能极高。
二、5分钟上手 ss
安装(一般系统自带):
apt install iproute2yum install iproute
核心命令:
最常用的 5 个命令:
ss -lntss -antss -sss -pantss -o state established
含义:
三、最常用的 ss 命令
1 查看所有 TCP 连接
输出:
State Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 4096 0.0.0.0:9964 0.0.0.0:*
含义:
| |
|---|
| |
| |
| |
Local Address:Port | |
Peer Address:Port | |
2 查看监听端口
输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 4096 0.0.0.0:9964 0.0.0.0:*
快速查看服务器监听:
结果:
LISTEN 0 4096 0.0.0.0:996 0.0.0.0:* users:(("cilium-envoy",pid=2879,fd=35))
可以看到进程。
3 查看某个端口连接数
例如 nginx:
ss -Hant state established '( sport = :80 )' | wc -l
统计:
当前连接数
四、ss 最强大的功能:状态过滤
TCP 状态:
ESTABLISHEDSYN-SENTSYN-RECVFIN-WAIT-1FIN-WAIT-2TIME-WAITCLOSE-WAIT
查看 已建立连接
查看 TIME_WAIT
查看 SYN 攻击
如果 SYN-RECV 非常多:
说明可能:
五、查看每个连接的详细信息
示例输出:
cubic wscale:7,7 rto:204 rtt:12.3/2.1
含义:
这是 TCP 内核信息。
对于性能调优非常重要。
六、查看 socket 内存使用
示例:
skmem:(r0,rb131072,t0,tb16384)
含义:
排查:
TCP buffer 不够
七、查看连接对应进程
示例:
ESTAB 0 0 10.0.0.1:443 10.0.0.2:50234 users:(("nginx",pid=123))
查看某进程连接:
八、服务器性能排障实战
场景 1:服务器连接数爆炸
查看总连接:
输出:
查看状态分布:
ss -antH | awk '{print $1}' | sort | uniq -c | sort -r
示例:
221 ESTAB120 TIME-WAIT29 LISTEN3 SYN-SENT
判断:
场景 2:CLOSE_WAIT 堆积
查看:
如果很多:
说明
应用没有关闭 socket
代码 bug。
场景 3:端口是否被占用
替代:
更快方法:
场景 4:服务器卡顿
查看发送队列:
如果:
Send-Q 很大
说明:
客户端接收慢
九、百万连接服务器分析技巧
统计连接数:
ss -antH state established | wc -l
统计 IP TOP10:
ss -antH state established | tail -n +2 | awk '{ip=$NF; sub(/.*\[/,"",ip); sub(/\].*/,"",ip); sub(/:[0-9]+$/,"",ip); print ip}' | sort | uniq -c | sort -nr | head -10
示例:
12000 192.168.1.108000 10.0.0.2
识别:
十、ss + eBPF 深度分析
在现代 Linux 排障中:ss 只负责 socket 状态
如果要深入:需要 eBPF
例如:
配合 bcc
可以分析:
例如:
tcpconnecttcpaccepttcpretrans
组合分析:
就是现代 Linux 网络排障标准方案。
十一、ss 与 netstat 对比
总结:
生产环境必须使用 ss。
十二、工程师最常用的 10 个 ss 命令
ss -sss -lntss -pantss -antss -o state establishedss -o state syn-recvss -o state time-waitss -ant '( sport = :80 )'ss -tiss -m
十三、记住 ss 的核心哲学
Linux 网络排障三板斧:
分别解决:
这是现代 Linux 调试体系。
结语
如果你只记住一句话:
ss 是现代 Linux 网络排障的第一入口。
相比老工具 netstat,ss 已经成为事实标准。
参考链接:https://man7.org/linux/man-pages/man8/ss.8.html
推荐文章
从应用到网卡:Linux网络栈7层排查全景图
curl -w:一条命令看透HTTP请求全过程
socat:Linux网络世界的“万物互联”工具