介绍
ss(Socket Statistics)是 Linux 下替代 netstat 的套接字查看工具,速度更快、信息更全,内核直接读取 socket 信息,适合高并发服务器。
对比
netstat遍历/proc,大量连接时很慢ss直接调用内核接口。
语法
ss [OPTIONS] [FILTER]
常用参数
| 参数 | 说明 |
|---|---|
-t |
TCP 套接字 |
-u |
UDP 套接字 |
-x |
Unix 域套接字 |
-l |
只显示监听端口(Listen) |
-a |
所有套接字(监听+已建立) |
-n |
数字形式,不解析域名/端口名(推荐,更快) |
-p |
显示进程名和 PID(需要 root 或 sudo 权限) |
-e |
显示详细信息(uid, inode) |
-i |
显示内部 TCP 信息(拥塞窗口、定时器) |
-s |
汇总统计,不列出每个连接 |
-4 |
IPv4 |
-6 |
IPv6 |
-p 显示进程名
注意: 非 root 用户需要 sudo 提权
sudo ss -p
-l 显示端口号(将端口号解析成协议名)
ss -l
执行结果如下,将端口号解析成协议名:
-ln 显示端口号
就显示原始端口号,不会将端口号解析成协议
ss -ln
例子
提示:非root用户需要使用 sudo,否则可能不显示程序名
1. 查看所有监听 TCP 端口(数字,带进程)
ss -tlnp
2. 查看所有 TCP 连接(包括已建立)
ss -tanp
3. 查看 UDP 监听端口
ss -ulnp
4. 连接统计概览
ss -s
输出示例:
Total: 132 (kernel 156)
TCP: 18 (estab 4, closed 5, orphaned 0, synrecv 0, timewait 0/0), ports 0
5. 过滤:只看指定端口
目标端口 80
ss -t 'dport = :80'
源端口 22
sudo ss -tlnp 'sport = :80'
端口范围
ss -t 'dport >= :8000 and dport <= :8080'
6. 过滤指定 IP
ss -t 'src 192.168.1.100'
ss -t 'dst 10.0.0.5'
7. 查找某程序的端口号
查找nginx程序的端口号
sudo ss -lnp | grep nginx
返回结果字段说明
ss -tlnp 命令的返回结果:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
State:套接字状态Recv-Q:接收队列,等待应用读取的数据字节数Send-Q:发送队列,等待发往对端的数据字节数Local Address:Port:本机地址端口Peer Address:Port:对端地址端口
Recv-Q / Send-Q 不为0:一般代表连接阻塞,需要排查。

