ss 是什么
ss(socket statistics)是 Linux iproute2 套件中的连接查看工具,用来替代已停止维护的 netstat。它直接通过 netlink 接口从内核读取套接字数据,不做 /proc 全量遍历,几万条连接的机器也能秒级返回,是端口、连接数、监听状态类排查的第一入口。
基本信息
| 适用平台 | Linux 发行版通用(iproute2 套件,主流系统默认自带;老系统可能需单独安装) |
|---|---|
| 命令语法 | ss [选项] [过滤表达式] |
| 常用选项 | -t TCP / -u UDP / -l 仅监听 / -n 不解析名称 / -p 显示进程 / -a 全部状态 / -s 汇总统计 / -H 去表头 |
| 权限说明 | 查看进程名与 PID 需要 root;普通用户只能看到自己的连接,sudo ss -tlnp 才完整 |
典型使用场景
- 服务自检:改完配置重启服务后,用 ss -tlnp 确认监听地址与端口是否符合预期
- 端口占用排查:启动报错 Address already in use,用 ss -tlnp 定位占用进程
- 连接数分析:ss -s 看总量,ss -tan state time-wait | wc -l 观察 TIME-WAIT 堆积
- 对外连接审计:ss -tnp state established 列出所有已建立连接,排查可疑外联
- 巡检脚本:配合 -H 去掉表头,输出格式稳定,便于脚本解析
常用示例
常用示例
ss -tlnp # TCP 监听端口 + 进程(-l 必需,最常用的检查)
ss -tlnp | grep :443 # 确认 443 是否在监听
ss -ulnp # UDP 监听(DNS/NTP 类问题排查)
ss -tan state established # 查看所有已建立的 TCP 连接
ss -tnp state time-wait | wc -l # 统计 TIME-WAIT 数量
ss -s # 连接总数统计摘要
ss -H -tln # 去掉表头,脚本中解析更稳-tlnp 输出逐列读法
| 列 | 含义 | 怎么看 |
|---|---|---|
| State | 连接状态:LISTEN 监听 / ESTAB 已建立 / TIME-WAIT 主动关闭后等待 | 服务检查必须是 LISTEN |
| Recv-Q / Send-Q | 监听行:Recv-Q 是等待 accept 的连接数,Send-Q 是队列上限;连接行:表示收发队列积压字节 | Recv-Q 持续非 0 说明应用 accept 慢 |
| Local Address:Port | 本端监听地址与端口 | 0.0.0.0 表示所有网卡可访问,127.0.0.1 表示仅本机 |
| Peer Address:Port | 对端地址;监听行显示 *:* | 连接行用来确认访问来源 |
| Process | 进程名与 PID | 看不到时加 sudo 重试 |
过滤表达式在内核侧完成,比管道 grep 更准:ss -tn dport = :443 按目标端口过滤,ss state established 按状态过滤,避免 grep 误命中地址片段。
极简环境(容器镜像、老系统)可能没有 ss 命令:Debian/Ubuntu 安装 iproute2,RHEL/CentOS 安装 iproute,Alpine 安装 iproute2 即可。
从 netstat 迁移注意:常用选项 -t/-u/-l/-n/-p/-a 基本对应,但过滤与统计写法完全不同(ss 用 state 表达式与 ss -s)。脚本里不要做简单字符串替换。