Linux命令-ss(查看 Socket 统计)
-
- 快速参考
- 核心选项
- 基本用法
- 按状态过滤
- 按端口/地址过滤
- 按进程过滤
- 高级用法
- ss vs netstat 对比
ss(Socket Statistics)是 netstat 的现代替代品,用于显示套接字(socket)统计信息。它直接从内核获取信息,比 netstat 速度更快,信息更丰富,尤其是在系统有大量连接时优势明显。ss 是 iproute2 工具包的一部分,已成为现代 Linux 系统网络诊断的首选工具。
快速参考
ss [选项] [过滤器]
内核直达:ss 通过 Netlink 接口直接与内核通信获取套接字信息,避免了 netstat 读取 /proc 文件系统的开销。
核心选项
| -t | 显示 TCP 套接字 |
| -u | 显示 UDP 套接字 |
| -l | 仅显示监听状态的套接字 |
| -a | 显示所有(监听+非监听)套接字 |
| -n | 以数字形式显示地址和端口(不解析域名) |
| -p | 显示使用该套接字的进程信息 |
| -s | 显示统计摘要 |
| -o | 显示计时器信息(keepalive、重传等) |
| -e | 显示详细的套接字内存使用信息 |
| -m | 显示套接字内存使用 |
| -r | 解析主机名 |
| -i | 显示内部 TCP 信息 |
| -4/-6 | 只显示 IPv4/IPv6 套接字 |
基本用法
# 显示所有已建立的 TCP 连接
ss -t
# 显示所有 TCP 套接字(含监听)
ss -ta
# 显示所有监听状态的 TCP/UDP 套接字
ss -tul
# 最常用组合:显示所有监听端口及对应进程
ss -tulnp
# 显示所有已建立的连接(含进程名和端口号)
ss -tnp
# 显示统计摘要
ss -s
# Total: 245
# TCP: 32 (estab 12, closed 15, …)
# …
# 显示计时器信息
ss -to
按状态过滤
# 查看所有 ESTABLISHED 状态的 TCP 连接
ss -t state established
# 查看所有 LISTEN 状态的套接字
ss -t state listening
# 查看 TIME-WAIT 状态的连接
ss -t state time-wait
# 查看 CLOSE-WAIT 状态的连接(可能表示连接泄漏)
ss -t state close-wait
# 查看 SYN-SENT 和 SYN-RECV 状态(用于诊断连接问题)
ss -t state syn-sent syn-recv
# 查看所有非监听 TCP 连接
ss -t state all exclude listening
# 查看 FIN-WAIT 状态的连接
ss -t state fin-wait-1 fin-wait-2
# 查看连接状态分布统计
ss -ta | awk '{print $1}' | sort | uniq -c | sort -rn
按端口/地址过滤
# 查看目标端口为 80 的连接
ss -tn dst :80
# 查看源端口为 80 的连接
ss -tn src :80
# 查看源端口或目标端口为 80 的连接
ss -tn '( dport = :80 or sport = :80 )'
# 查看来自特定 IP 的连接
ss -tn dst 192.168.1.100
# 查看连接到特定子网的连接
ss -tn dst 10.0.0.0/8
# 查看特定端口范围的连接
ss -tn dst :1024-65535
# 查看连接到 192.168.1.1:443 的连接
ss -tn dst 192.168.1.1:443
# 查看小于 1024 端口的监听服务
ss -tlnp sport lt :1024
# 查看大于等于 8080 端口的连接
ss -tn sport ge :8080
按进程过滤
# 查看 Nginx 的所有连接(需要 -p 选项)
ss -tnp | grep nginx
# 方式二:使用 -p 选项并配合状态过滤
ss -tp state established | grep nginx
# 查看某个 PID 的所有连接
ss -tnp | grep "pid=1234"
# 统计每个进程的连接数
ss -tnp | awk -F'"' '{print $2}' | sort | uniq -c | sort -rn | head -10
# 查看 SSH 服务的监听状态
ss -tlnp | grep sshd
高级用法
# 显示套接字内存使用详情
ss -tem
# 显示 TCP 内部信息(MSS、拥塞窗口等)
ss -ti
# 结合计时器和进程信息
ss -topn
# 实时监控连接变化(使用 watch)
watch -n 1 'ss -tn state established | wc -l'
# 监控 ESTABLISHED 连接数的变化趋势
while true; do
echo "$(date '+%H:%M:%S') $(ss -tn state established | tail -n +2 | wc -l)"
sleep 1
done
# 诊断 TIME-WAIT 过多的服务器
echo "TIME-WAIT 连接数: $(ss -tn state time-wait | wc -l)"
# 检查 CLOSE-WAIT 连接泄漏
ss -tnp state close-wait
# 大量 CLOSE-WAIT 可能表示应用程序未正确关闭连接
# 显示内核维护的套接字内存统计
ss -m
# 按状态分组统计
ss -t state established '( sport = :443 )' | wc -l
echo "HTTPS 活跃连接: $?"
# 查看 Docker 容器端口映射
ss -tlnp | grep docker-proxy
ss vs netstat 对比
| 速度 | 极快(Netlink 接口) | 较慢(读取 /proc) |
| 大型服务器 | 无性能问题 | 可能卡顿 |
| 过滤语法 | 丰富的状态/端口过滤 | 仅 grep 过滤 |
| 内核信息 | 显示 TCP 内部状态 | 有限 |
| 默认安装 | iproute2 包 | net-tools 包 |
# 同一功能的命令对比
netstat -tulnp # → ss -tulnp
netstat -an # → ss -an
netstat -s # → ss -s
netstat -i # → ip -s link
# 性能对比测试
time netstat -tan > /dev/null
time ss -tan > /dev/null
# ss 通常快 10 倍以上(在连接数上万时优势明显)
最佳实践:在日常网络诊断中,优先使用 ss 替代 netstat。在高并发服务器上,ss 的速度优势尤为突出。
网硕互联帮助中心



评论前必须登录!
注册