首页/网络/网络排障速查/ss -tanp:活动连接与归属进程

ss -tanp:活动连接与归属进程

从两端看连接:谁连到我的服务、我的进程连出去了哪里。-a 显示全部状态、-n 不解析、-p 带进程,配合 dport/sport 过滤把输出收缩到一个端口。

网络排障速查网络更新于 2026-10-13

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归属进程名与进程号同一端口多进程共存时按进程号聚合后再判断
统计连接数时记得去掉表头,否则数字总比实际多一;需要脚本化计数就用去表头参数,避免每次都要心算修正。
把对端地址列聚合排序,可以一眼看出连接集中在哪些来源;这在排查异常外连与容量分布时比逐条翻看高效得多。

常见核对场景

目标观察要点易错点
确认服务被谁访问按目的端口过滤后统计对端地址把对端随机端口当成服务端口
确认进程外连目标按进程名或进程号聚合连接同一端口多个进程时结论混淆
核对来源白名单把来源地址去重后与清单比对忘记统计非建立状态的连接
判断连接是否泄漏间隔取样比较连接数增量只看一次快照就下结论
不要把连接数当成活跃用户数:长连接会一直占着记录,短连接可能瞬间回收,结论要结合业务模型与时间窗口。

易错点

  • 把对端的随机高位端口当成服务端口,误判为异常连接
  • 过滤表达式不加引号,括号被命令行解释器处理,命令直接报语法错误
  • 统计连接数时没去掉表头,数字偏差一,多次核对后才发现口径问题
  • 用普通用户查询却指望看到所有进程归属,看不到就以为命令不生效
  • 只看瞬间快照判断连接泄漏:应当间隔取样对比增量,而不是凭一次输出下结论
  • 在容器内查看连接却按宿主视角理解地址,回环与地址映射会造成误判

数据来源与参考

  • man 8 ss(iproute2)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌