实用linux命令-ss
本文定位:速查手册。 按诊断场景组织 ss 的常用查询方式,供排查网络问题时快速_copy-paste_,与 netstat 的替代关系见文末对照表。
版本说明
本文基于 iproute2 套件中的 ss 命令(随 Linux 内核 2.6+ 普及)。ss 是 netstat 的现代替代品,在 CentOS 6+/Ubuntu 14.04+ 等主流发行版默认安装。ss 与 netstat 的核心参数语义一致(-t TCP、-u UDP、-l 监听、-n 数字形式),迁移成本极低。
# 场景一:查看监听端口与服务对应关系
定位「哪个进程占用了某端口」是最常见需求。
查看所有监听端口:
ss -tlnp
-t:TCP-l:仅监听(Listening)-n:数字形式显示地址和端口(不解析域名/服务名)-p:显示进程信息
查看指定端口被谁占用:
ss -tlnp | grep :80
易错点:-p 需要 root 权限才能查看其他用户的进程。普通用户执行时,非本用户的进程显示为 -。
# 场景二:连接状态排查
服务出现「连接数耗尽」或「大量 TIME_WAIT」时,用状态过滤快速定位。
查看所有已建立的连接:
ss -t state established
统计各状态的连接数(排查 TIME_WAIT 泛滥):
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
查看连接到某服务的客户端列表:
ss -tn dst :3306
查看某 IP 发起的所有连接:
ss -tn src 192.0.2.100
# 场景三:套接字内存与性能信息
排查缓冲区溢出、重传率高等性能问题时使用。
显示详细 TCP 内部信息(窗口大小、重传计数等):
ss -ti
常用字段解释:
cwnd:拥塞窗口ssthresh:慢启动阈值retrans:重传计数rtt:往返时间
显示套接字内存使用情况:
ss -tm
若 rcv_buf 或 snd_buf 接近系统限制,考虑调整内核参数 net.core.rmem_max / wmem_max。
# 场景四:UDP 与原始套接字
DNS、QUIC 等协议基于 UDP,排查时容易遗漏。
查看 UDP 监听端口:
ss -ulnp
查看所有 UDP 连接(含已建立):
ss -uan
查看原始套接字(ping、traceroute 等底层工具使用):
ss -w -a
# 常用参数速查表
# 基础参数
| 参数 | 含义 | netstat 等价 |
|---|---|---|
-t | TCP 套接字 | -t |
-u | UDP 套接字 | -u |
-l | 仅监听 | -l |
-a | 所有(监听+已建立) | -a |
-n | 数字显示(不解析) | -n |
-p | 显示进程 | -p |
# 高级参数
| 参数 | 含义 | 典型用法 |
|---|---|---|
-s | 显示统计摘要 | ss -s |
-i | 显示 TCP 内部信息 | ss -ti |
-m | 显示内存信息 | ss -tm |
-o | 显示计时器信息 | ss -to |
-4 | 仅 IPv4 | ss -tln4 |
-6 | 仅 IPv6 | ss -tln6 |
# ss 与 netstat 对照表
| 场景 | ss 命令 | netstat 命令 | 性能差异 |
|---|---|---|---|
| 查看监听端口 | ss -tlnp | netstat -tlnp | ss 快 10-100 倍 |
| 查看所有连接 | ss -tan | netstat -tan | ss 快 10-100 倍 |
| 查看进程关联 | ss -tlnp | netstat -tlnp | 两者都需要 root |
| 查看路由表 | ip route | netstat -r | 用 iproute2 替代 |
| 查看接口统计 | ip -s link | netstat -i | 用 iproute2 替代 |
为什么 ss 更快:netstat 从 /proc/net/ 逐个读取文件,内核态-用户态切换开销大;ss 直接使用 sock_diag netlink 接口批量获取,减少系统调用。
何时还用 netstat:某些精简容器镜像只装 net-tools 没装 iproute2 时。
# 坑与边界
1. -p 参数看不到进程的几种情况
- 权限不足:非 root 用户只能看到自己的进程
- 连接已关闭但套接字未释放:进程退出后短暂残留
- 内核线程创建的套接字:无对应用户进程
2. TIME_WAIT 状态的套接字
高并发短连接场景(如 HTTP keep-alive 关闭时)容易产生大量 TIME_WAIT:
ss -tan | grep TIME_WAIT | wc -l
若该数值持续增长且接近 net.ipv4.ip_local_port_range 范围(默认 32768-60999),会导致「端口耗尽」无法建立新连接。
3. ss 显示不全
默认 ss 只显示已建立和非监听套接字的一小部分,完整列表需要 -a:
ss -tan # 简要
ss -tuan # 全量(含 UDP)
2
🤖 Agent 可直接解析的元数据块(点击展开)
{
"_meta": {
"doc_version": "2025-03-30",
"article_id": "linux-ss-cheatsheet",
"profile_context": "any",
"estimated_setup_time": "5min"
},
"quick_start": {
"list_listening": "ss -tlnp",
"find_process_by_port": "ss -tlnp | grep :80",
"established_connections": "ss -t state established",
"count_by_state": "ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn",
"tcp_internals": "ss -ti",
"memory_usage": "ss -tm"
},
"safety_rules": [
"-p 参数需要 root 权限查看全量进程信息",
"高并发场景 TIME_WAIT 过多时需关注端口耗尽",
"容器环境可能缺少 iproute2 套件"
],
"verification": {
"iproute2_installed": "which ss",
"kernel_support": "ss -s | head -5",
"port_binding": "ss -tlnp | grep ':PORT'"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26