netstat 本身不支持记录历史数据或生成趋势图,但可通过 shell 脚本配合 watch、awk 和时间戳实现周期性采样与日志记录;聚焦 established、syn_recv、close_wait 状态可判断连接健康度;导出 csv 后可用 excel 或 grafana 可视化;推荐用 ss -s、prometheus + node_exporter 替代以提升效率与稳定性。

netstat 本身不支持直接记录历史数据或生成趋势图,但它可以配合 shell 脚本和时间戳工具,实现对并发连接数的周期性采样,从而间接反映增长趋势。
按状态统计并定时快照
最实用的方式是定期执行连接状态汇总命令,并将结果追加到日志文件中。例如:
- 每10秒采集一次 TCP 各状态连接数:
watch -n 10 'date "+%F %T" >> conn_trend.log; netstat -n | awk "/^tcp/ {++S[\$NF]} END {for(a in S) print a, S[a]}" >> conn_trend.log; echo "" >> conn_trend.log' - 输出示例会类似:
2026-07-09 18:30:20
ESTABLISHED 1245
TIME_WAIT 892
SYN_RECV 7
CLOSE_WAIT 12
聚焦关键状态做趋势观察
真正影响服务承载能力的通常是 ESTABLISHED、SYN_RECV 和 CLOSE_WAIT:
- ESTABLISHED 持续上升:说明活跃连接在增加,需结合业务流量判断是否正常
- SYN_RECV 明显堆积:可能遭遇 SYN Flood 攻击,或后端响应慢导致握手未完成
- CLOSE_WAIT 长期不降:大概率是应用层未主动关闭 socket,存在连接泄漏风险
导出数据供可视化分析
把日志整理成 CSV 格式,就能导入 Excel 或 Grafana 分析趋势:
- 用 awk 提取时间与 ESTABLISHED 数值:
awk '/ESTABLISHED/ {getline t trend.csv - 确保每行格式为:
2026-07-09 18:30:20,1245
替代方案建议
若需长期、稳定监控,推荐用更现代的组合:
- 用 ss -s 替代 netstat 获取概要(更快、开销更低)
- 用 prometheus + node_exporter 自动采集 socket 指标(如 node_netstat_Tcp_CurrEstab)
- 脚本中避免依赖 root 权限的 -p 参数,防止权限问题中断采样











