ss 命令可高效查看 Nginx 网络连接状态,支持按端口、PID 精准筛选,并分类统计 ESTAB/SYN-RECV/TIME-WAIT 等状态数,结合客户端 IP 分析与 stub_status 交叉验证,助力性能诊断与攻击识别。

使用 ss 命令可以高效、低开销地查看 Nginx 当前的网络连接状态,比 netstat 更快且更轻量。关键在于精准筛选 Nginx 进程相关的 socket 信息,并按连接状态分类统计。
确认 Nginx 监听端口和进程 ID
先明确 Nginx 实际监听的端口(通常是 80/443)及主进程 PID,避免误查其他服务:
- 查监听端口:
ss -tlnp | grep ':80\|:443' - 查主进程 PID:
pgrep -f "nginx: master"或cat /var/run/nginx.pid - 注意:若 Nginx 以非 root 用户运行(如 www-data),可能需要
sudo权限才能看到进程名和 PID
按状态统计所有 Nginx 连接数
用一条命令汇总 ESTAB、SYN-RECV、TIME-WAIT 等关键状态的数量:
sudo ss -tn state established '( dport = :80 or dport = :443 )' | wc -lsudo ss -tn state syn-recv '( dport = :80 or dport = :443 )' | wc -lsudo ss -tn state time-wait '( dport = :80 or dport = :443 )' | wc -l
可合并为一键统计脚本片段:
for s in established syn-recv time-wait fin-wait-1; do echo "$s:"; sudo ss -tn state "$s" '( dport = :80 or dport = :443 )' | wc -l; done
查看活跃连接的客户端 IP 分布
快速识别是否存在异常访问(如爬虫、CC 攻击):
- 列出所有 ESTAB 连接的源 IP 并排序计数:
sudo ss -tn state established '( dport = :80 or dport = :443 )' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10 - 只看 IPv4 连接:
sudo ss -4tn state established '( dport = :80 or dport = :443 )' - 加
-i可查看 TCP 详细指标(如 rtt、retrans)用于性能分析
结合 Nginx 自身状态做交叉验证
ss 显示的是内核层面的 socket 状态,而 Nginx 的 stub_status 模块提供应用层连接数(Active connections)。两者应大致对应,但有差异:
-
Active connections(来自/status)≈ss -tn state established+state reading+state writing - 若
ss中 ESTAB 数远高于 stub_status 的 Active,可能说明请求未被及时读取(如后端慢、worker_connections 不足) - 大量
syn-recv可能表示 SYN Flood,需检查防火墙或启用net.ipv4.tcp_syncookies=1

















