Linux 使用 ss 命令排查网络连接问题

2次阅读

ss 是 linux 中比 netstat 更快的网络诊断工具,直接读取内核 socket 信息,常用命令如 ss -tuln 查监听端口、ss -tun 查已建立连接、ss -tulnp 显示进程、ss -s 统计状态,可高效定位端口占用、连接泄漏等问题。

Linux 使用 ss 命令排查网络连接问题

ss 是 Linux 中比 netstat 更快、更高效的网络连接诊断工具,它直接读取内核 socket 信息,适合排查连接状态异常、端口占用、TIME_WAIT 过多、监听失败等问题。

查看所有 TCP/udp 连接(含监听和已建立)

快速掌握当前网络连接全貌:

  • ss -tuln:显示所有 监听中(-l) 的 TCP(-t)和 UDP(-u)端口,-n 禁用域名解析(加快输出),-tuln 是最常用组合
  • ss -tun:显示所有 非监听 的 TCP/UDP 连接(如 ESTABLISHED、CLOSE_WAIT),适合查异常长连接或残留连接
  • -p 可显示对应进程(需 root 权限):sudo ss -tulnp,能直接看到哪个程序占用了 8080 或 3306 等关键端口

定位特定端口或 IP 的连接

缩小排查范围,精准定位问题来源:

  • 查本地监听的 80 端口:ss -tlnp | grep ':80'
  • 查与某远程 IP 建立的连接:ss -tun src 192.168.1.100ss -tun dst 203.208.60.1
  • 查处于 TIME_WAIT 状态的连接数量:ss -tan state time-wait | wc -l,值过大可能影响新连接建立

分析连接状态分布与性能瓶颈

通过状态统计判断连接健康度:

  • ss -tan state established | wc -l 查当前活跃连接数
  • ss -s 输出简洁汇总:包含 total、TCP:synrecv、estab、time_wait、closed 等各状态连接数,一眼识别是否积了大量 FIN_WAIT2 或 CLOSE_WAIT
  • CLOSE_WAIT 多通常表示本地方应用未正确关闭 socket;FIN_WAIT2 多可能对端迟迟不发 FIN,或本端未调用 close()

结合过滤与实时监控

动态观察连接变化:

  • 持续刷新查看变化:watch -n 1 'ss -tuln | head -20' 每秒刷新一次前 20 行
  • 按进程名过滤:sudo ss -tunp | grep 'nginx|redis'
  • 查 IPv6 连接加 -6,IPv4 加 -4,避免混淆双环境下的结果

掌握 ss 的核心选项组合,配合状态理解和常见场景过滤,就能高效定位端口冲突、连接泄漏、服务未启动、防火墙拦截等典型网络问题。不复杂但容易忽略细节。

text=ZqhQzanResources