5 分钟上手 ss
本页承诺:5 分钟内学会用 ss 回答"端口被谁占了、有哪些连接、连接卡在哪个状态"——它是 netstat 的现代替代品,读取内核 socket 表,更快、信息更全。
阅读时间约 4 分钟 + 动手 3 条命令。完整版见 ss 使用教程。
第 1 步:确认有 ss
bash
which ss # 输出路径即已安装(iproute2 套件自带,几乎都有)
# 没有就装:yum install -y iproute / apt install -y iproute2新发行版默认只有 ss、netstat 已被淘汰,掌握 ss 才是正道。
第 2 步:三连跑通
① 看所有监听端口(最常用)
bash
ss -tulnp四个字母各管一摊:-t TCP、-u UDP、-l 只列监听、-n 端口用数字(-p 显示占用进程)。典型输出:
bash
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=800,fd=3))
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=901,fd=6))→ 一眼看清 22/80 在监听、分别被 sshd/nginx 占着。
② 查"端口被谁占了"(排障高频)
bash
ss -tlnp | grep :8080 # 谁占了 8080?
ss -tlnp 'sport = :8080' # 等价写法,避免 grep 误伤③ 看已建立的连接 & 卡住的状态
bash
ss -tn state established # 所有已建立的 TCP 连接
ss -tn state time-wait # 卡在 TIME-WAIT 的连接(连接数爆了就排查这里)
ss -tan # 全部 TCP,带状态列,诊断 CLOSE-WAIT 堆积CLOSE-WAIT 一直涨 → 对端关了、本端代码没关连接(典型泄漏);TIME-WAIT 过多 → 短连接太频繁,考虑复用或调内核参数。
常见坑(3 秒自查)
| 现象 | 原因 | 解决 |
|---|---|---|
Process 列空着、看不到 PID | 没加 -p 或权限不够 | 加 sudo 再跑 ss -tulnp |
端口显示被占但 grep 不到进程 | 用了主机名解析慢 | 一定带 -n(数字端口),别让 DNS 解析拖慢 |
| 想看 UDP 却一片空白 | 忘了 -u | ss -ulnp 才列 UDP |
| 连接数特别多输出刷屏 | 没过滤 | `ss -tan state established |
深度入口
- ss 使用教程—— 状态过滤、TCP 内存、内核 socket 表原理
- netstat 使用教程—— 老命令对照,迁移无压力
- 5 分钟上手系列
一句话总结:ss 三步 = ss -tulnp 看监听端口和占用进程 → grep :端口 查端口被谁占 → ss -tan state established/time-wait 看连接状态堆积;它是 netstat 的加速替代,排网络第一手。