当前位置:首页>Linux>Linux性能优化:网络排查命令ss、ip、tc、ethtool 实战拆解

Linux性能优化:网络排查命令ss、ip、tc、ethtool 实战拆解

  • 2026-10-11 08:00:41
Linux性能优化:网络排查命令ss、ip、tc、ethtool 实战拆解

前面章节我们已经谈了Linux网络数据包从应用进程如何一步步走到网卡物理层,以及可能存在的问题点。同时引出了网络排查最常用的几个命令:ss、ip、tc、ethtool ,今天来详细拆解一下这几个命令。

Linux性能优化:网络背后的数据流转和关键指标

当收到线上报警,例如nginx 的 upstream 大量超时,我们一般习惯性敲 netstat -anp | grep 80。光标卡了五秒才吐结果——然后发现机器没装 netstat。apt install net-tools,等安装完再跑,又是三秒。

其实这是运维人员非常头疼的问题 - 思路混乱。

真正的排查路径,是沿着协议栈一层一层往下走:ss 看连接,ip 看路径,tc 看排队,ethtool 看硬件。四把刀,从应用到物理。看完这篇,你再遇到网络问题,脑子里会有一条清晰的路线图。


一、ss:应用层的利器

ss 不是比 netstat 好一点——是一个数量级的差距。它在内核态直接读 socket 信息,不像 netstat 那样遍历 /proc 还要层层解析。

看监听端口:

ss -tuln

输出里有 LISTEN 就表示有人在听。例如:连不上 MySQL,可以先跑这条,确认 3306 确实还活着。

看连接状态:

ss -tan state establishedss -tan state time-waitss -tan '( sport = :80 or dport = :80 )'

TIME_WAIT 是 Web 服务器上的高频场景。成千上万是正常的,但配合 ss -s 看内存占用,就能判断这些连接是不是在空耗资源。

定位连接泄漏:

ss -tanp | grep 192.168.1.100 | wc -l

这个数字持续涨不回落,大概率是应用没关 socket。加上 -p,进程名和 PID 可以全带出来一一查看到底是哪个引起的。

应用层排查最常用这几个命令:

  • ss -s
     查看整体水位
  • ss -tanp state established
     看活着的连接
  • ss -tanp state time-wait
     看正在老化的连接

二、ip:网络层的核心

ip 是 iproute2 全家桶的核心,替代了 ifconfig、route、arp 三件套。写法更一致,信息也更完整。

查地址:

ip addr show eth0

IP、掩码、广播地址,都在。比 ifconfig 的输出清晰很多。

查路由:

ip route show

查默认路由走哪、到某个内网段走哪条路。如果想知道到底怎么出去的,可以用这个:

$ ip route get 8.8.8.88.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 0

一条命令告诉你出口、源地址、出站网卡。

查邻居(ARP 表):

ip neigh show

如果邻居状态是 FAILED 或 INCOMPLETE,二层已经断了。这时候查路由、查 iptables 都是浪费时间。

策略路由的使用:

ip rule showip route show table 100

多网卡场景下,让 10.0.0.0/8 走 eth1,外网走 eth0。ip rule 加多张路由表,细粒度控制流量的走向。

一个隐藏技能:

ip monitor

路由变化、地址变化、邻居变化,实时输出。


三、tc:链路层

tc 是 Linux 最被低估的工具之一。它的工作位置在链路层——数据包离开内核、进入网卡之前,得先过它这一关。

先看:

tc qdisc show dev eth0
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1222 ...

这是 Linux 默认的出队策略 pfifo_fast,三个优先级 band,大部分场景不需要动。

模拟网络延迟:

tc qdisc add dev eth0 root netem delay 100mstc qdisc del dev eth0 root

一般用在测试弱网环境下的应用表现。

限速:

tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

模拟低速链路,验证系统在带宽瓶颈下的表现。

需要注意的是: tc 控制的是出队,不是入队。流量方向是内核 → tc → 网卡。想控制进入的方向,需要在对端,或者在本机用 ingress qdisc 加 ifb 虚拟网卡做流量整理。


四、ethtool:物理层的检查

走到最底层,就是网卡和线缆。这层只有一个工具:ethtool。

看链路状态:

ethtool eth0

Speed、Duplex、Auto-negotiation、Link detected。这四行数据基本上筛掉一半的硬件问题。

最常见的问题:千兆网卡显示 100Mb/s。原因一般是网线质量差、两端协商失败、或者光模块老化。可以先查这个,别急着重装驱动。

看驱动和固件:

ethtool -i eth0
driver: ixgbeversion: 5.15.0firmware-version: 0x61b0d001bus-info: 0000:03:00.0

记得有一次环境线上丢包严重,查了一圈发现是网卡驱动太老,不支持新版内核的某些 offload。升级驱动后才恢复。没有 -i 排查起来就会费劲很多。

看硬件统计:

ethtool -S eth0

网卡驱动的黑匣子:

  • rx_dropped
     / tx_dropped — ring buffer 满了,内核来不及收
  • rx_crc_errors
     — 物理层校验错误,大概率是线缆或光模块的问题
  • rx_fifo_errors
     — FIFO 溢出,中断处理跟不上

丢包排查流程:

发现丢包后,按这个顺序查:

  1. ethtool -S eth0 | grep -i error
     — 硬件层有没有报错
  2. ethtool -k eth0 | grep on
     — TSO/GRO 这些 offload 开没开(通常应该开着)
  3. ethtool -g eth0
     — ring buffer 多大,不够可以调大
  4. ethtool -m eth0
     — 光模块收发功率(光纤链路一般都要查)

藏得比较深的参数:

ethtool --show-priv-flags eth0

有些网卡有私有标志,比如 Mellanox 的 rx_steering。


如果把这四层串起来的话,排查流程其实就比较清晰了:

ss 看连接     →  连没连上ip 看路径     →  路由对不对tc 看排队     →  被限速了没有ethtool 看硬件 →  网卡坏了没有

从应用到物理,从逻辑到信号。每一层确认完了再往下走,不用再一步步的猜了。

Linux性能调优系列

- CPU篇

Linux性能优化:CPU处理进程的原理(一)

Linux性能调优:CPU处理进程的原理(二)

Linux性能调优:理解CPU中的平均负载和使用率

Linux性能调优:详解CPU使用率计算方式

Linux性能调优:CPU使用率过高的排查思路

- 内存篇

Linux性能调优:关于内存

Linux性能调优:为什么swap升高了

Linux性能调优:理解内存中的缓存

Linux性能调优:如何快速定位处理内存泄漏?

Linux性能调优:一文讲清内存问题的排查方法

- 磁盘篇

Linux性能调优:深入理解文件系统和磁盘

Linux性能调优:详解磁盘工作流程及性能指标

Linux性能调优:再谈磁盘性能指标和进程级I/O

Linux性能调优:详解FIO性能测试的几个常用场景

Linux系统调优:深入分析磁盘延迟变高的问题

Linux性能调优:常见的磁盘I/O性能优化方法

- 网络篇

Linux性能优化:网络背后的数据流转和关键指标

如果您有更好的理解和建议,可以免费加入知识星球,留言探讨~

最新文章

随机文章