ss -tanp 是什么
看活动连接的完整视角:字母里包含全部状态,再加进程归属,于是能同时回答『谁连到我的服务』与『我的进程连去了哪里』两个问题。默认输出很长,实际排障几乎总是配合过滤表达式使用:按端口、按对端地址、按来源地址把范围收窄到一个具体服务或一台具体机器上,再逐条核对。
基本信息
| 适用平台 | Linux 各主流发行版,随 iproute2 预装 |
|---|---|
| 关键参数 | -t TCP、-a 含全部状态、-n 不解析、-p 显示进程、-H 去掉表头 |
| 过滤语法 | 表达式用单引号包裹,如声明目的端口或来源地址的条件 |
| 权限要求 | 查看连接无需特权;显示进程归属需要 root 或与进程同用户 |
| 使用要点 | 同一条连接在两端各有一条记录,对齐方向再下结论 |
典型使用场景
- 查连接归属:确认某个端口上的连接由哪个进程持有
- 核对来源清单:列出访问某服务的全部对端地址,判断是否在预期范围
- 排查连接泄漏:观察同一进程持有的连接数是否随时间持续增长
- 验证连通结果:从本地发起测试后,确认连接确实建立了
- 定位异常外连:发现某进程连往非预期地址时,追查其配置来源
查连接与进程
查连接与进程
ss -tanp | head -30 # 大致浏览活动连接
ss -tanp '( dport = :3306 or sport = :3306 )' # 与数据库端口相关的连接
ss -tanp src 10.0.0.9 # 只看来自指定来源的连接
ss -tanp '( dport = :80 )' | wc -l # 统计到本机 80 端口的连接数
ss -tanp state established '( sport = :443 )' # 只看已建立的加密连接
ss -tanp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head # 按对端地址聚合输出逐列读法
| 列 | 含义 | 正常与异常 |
|---|---|---|
| State | 连接状态 | 非建立状态占多数时说明连接回收或异常中断偏多 |
| Recv-Q | 已收到但未读走的字节数 | 长期非零说明应用读取慢,可能造成对端发送受阻 |
| Send-Q | 已发出但未确认的字节数 | 长期非零说明对端接收慢或链路拥塞 |
| Local Address:Port | 本端地址与端口 | 服务端侧这里是服务端口,客户端侧是随机端口 |
| Peer Address:Port | 对端地址与端口 | 对端高位随机端口属正常,不是异常连接 |
| Process | 归属进程名与进程号 | 同一端口多进程共存时按进程号聚合后再判断 |
统计连接数时记得去掉表头,否则数字总比实际多一;需要脚本化计数就用去表头参数,避免每次都要心算修正。
把对端地址列聚合排序,可以一眼看出连接集中在哪些来源;这在排查异常外连与容量分布时比逐条翻看高效得多。
常见核对场景
| 目标 | 观察要点 | 易错点 |
|---|---|---|
| 确认服务被谁访问 | 按目的端口过滤后统计对端地址 | 把对端随机端口当成服务端口 |
| 确认进程外连目标 | 按进程名或进程号聚合连接 | 同一端口多个进程时结论混淆 |
| 核对来源白名单 | 把来源地址去重后与清单比对 | 忘记统计非建立状态的连接 |
| 判断连接是否泄漏 | 间隔取样比较连接数增量 | 只看一次快照就下结论 |
不要把连接数当成活跃用户数:长连接会一直占着记录,短连接可能瞬间回收,结论要结合业务模型与时间窗口。