别再用 netstat 了:用 ss 命令排查端口占用和连接异常的 5 个场景
每次排查服务器问题,看到有人第一反应就是敲 …
每次排查服务器问题,看到有人第一反应就是敲 netstat -anp | grep 端口,我都想提醒一句:netstat 该退休了。它属于老掉牙的 net-tools 包,很多新系统(Ubuntu 22.04+、Rocky 9、Debian 12)默认都不再预装。现在的主力是 iproute2 自带的 ss 命令,直接从内核 netlink 拉数据,比 netstat 读 /proc 那套快得多——连接数上万的机器上,差距能到秒级。
一、查端口被谁占了
这是最高频的场景:服务起不来,八成是端口被占了。一条命令直接定位进程:
ss -tlnp | grep :8080
参数拆开看:-t 只看 TCP,-l 只看监听状态,-n 不解析域名,-p 显示占用进程。普通用户看不到别人的进程名时,前面加个 sudo 就行。输出和 netstat 几乎一样,但速度快得多。
二、统计连接状态
想看机器上现在有多少 TIME_WAIT、多少 ESTAB,一条管道搞定:
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
这个在排查 TIME_WAIT 堆积、连接数打满、syn 队列异常的时候特别有用。一眼就能看出是哪个状态在堆积,比盯着 netstat 满屏刷强多了。
三、按 IP 或进程过滤
ss -tnp | grep 192.168.1.100 ss -tnp | grep nginx
排查某个 IP 开了多少连接、或者某个服务连了多少客户端,直接 grep 过滤即可。
四、高频参数速记
-t/-u:TCP / UDP-l:只看监听;-a:全部状态-n:不解析域名;-r:解析主机名-p:显示进程;-s:汇总统计-e:扩展信息(内存、拥塞窗口等)
这些参数自由组合,基本能覆盖日常排障。
五、小结
记住一句话:netstat 能干的,ss 都能干,而且更快更全。把肌肉记忆从 netstat 换成 ss,一个月后你会感谢现在的自己。要是哪天发现系统里连 ss 都没有了,装个 iproute2 就回来了。
