netstat -ant | awk 'nr>2 {print $6}' | sort | uniq -c | sort -nr可统计tcp各状态分布,重点排查close_wait(应用未关闭socket)、time_wait(短连接频繁)和established异常增长,并结合netstat -antp或ss命令定位进程与端口。

直接用 netstat -ant 提取状态字段,再用 awk + sort + uniq 统计,就能快速看出 ESTABLISHED、TIME_WAIT、CLOSE_WAIT 等连接在各状态的分布情况。关键不是看总数,而是识别异常堆积的状态——比如大量 CLOSE_WAIT 通常意味着应用没正确关闭 socket,大量 TIME_WAIT 则可能和短连接频繁建立有关。
统计所有TCP连接状态分布
执行这条命令即可获得按数量降序排列的连接状态汇总:
- netstat -ant | awk 'NR>2 {print $6}' | sort | uniq -c | sort -nr
说明:
- -ant:只显示 TCP 连接(-t)、全部状态(-a)、数字格式(-n)
- NR>2 跳过表头两行(避免把“State”当状态值)
- 是 netstat 输出中代表连接状态的字段(如 ESTABLISHED、LISTEN、TIME_WAIT)
- uniq -c 计数,sort -nr 按数值倒序排,一眼看到最多的是哪种状态
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
重点排查疑似泄漏的连接状态
端口泄漏常表现为某类连接长期不释放,需针对性检查:
-
CLOSE_WAIT 数量异常高:说明本机收到 FIN 后未调用 close(),大概率是程序逻辑缺陷。可加条件过滤:
netstat -ant | awk '$6 ~ /CLOSE_WAIT/ {print $5}' | sort | uniq -c | sort -nr | head -10
→ 查出哪些远端 IP 触发了最多 CLOSE_WAIT,便于定位客户端行为或服务端 bug -
ESTABLISHED 连接持续增长:先确认是否真实活跃,排除假连接:
netstat -ant | grep ESTABLISHED | wc -l
再结合进程查归属:
netstat -antp | grep ESTABLISHED | grep -v ':22\|:80\|:443' | head -5
→ 排除常规服务端口,聚焦非常规或高编号端口上的长连 -
大量 TIME_WAIT 占用端口资源:正常但需评估是否影响新连接。查看其占比:
netstat -ant | awk 'NR>2 {print $6}' | sort | uniq -c | sort -nr | head -3
若 TIME_WAIT 占比超 80% 且持续不降,考虑调整内核参数(如net.ipv4.tcp_tw_reuse)或优化客户端连接复用
关联进程与端口,定位泄漏源头
仅看状态不够,必须锁定是哪个进程在维持异常连接:
- 查监听端口对应进程(确认服务是否该开这么多连接):
netstat -tlnp | grep -E ':(8080|3000|8000)' - 查某进程(如 nginx、java)的所有 TCP 连接状态分布:
netstat -antp | grep ':8080' | awk '{print $6}' | sort | uniq -c | sort -nr - 查特定状态+端口组合的完整连接详情(用于抓包或日志比对):
netstat -antp | awk '$6=="CLOSE_WAIT" && $4~/:8080$/'
补充建议:避免权限与兼容性问题
实际使用时注意三点:
- 普通用户执行 -p 可能看不到其他用户的 PID/程序名,加 sudo 才完整(如
sudo netstat -antp) - 较新发行版(如 Ubuntu 22.04+/CentOS 8+)默认不预装 netstat,需先安装:
sudo apt install net-tools(Debian/Ubuntu)或sudo yum install net-tools(RHEL/CentOS) - 如需更高性能或替代方案,可用 ss -ant state all 替代 netstat(更轻量,输出格式略有不同),例如:
ss -ant state all | awk '{print $1,$2}' | sort | uniq -c | sort -nr










