一眼识别网卡是否跑满需用 sar -n dev 1 5 观察 txkb/s 和 rxkb/s 是否持续接近物理带宽上限(如千兆网卡约125000 kb/s),并结合 nethogs 定位进程、ss -i 分析 tcp 质量,避免误判协议栈瓶颈。

怎么一眼看出网卡是不是被跑满了
直接看 sar -n DEV 1 5 的输出,盯住 txkB/s 和 rxkB/s 这两列。如果某个网卡(比如 eth0)的数值持续接近物理带宽上限(例如千兆网卡理论峰值约 125 MB/s = 125000 kB/s),那它就是瓶颈源头。
常见错误现象:服务响应变慢、连接超时增多,但 top 显示 CPU 和内存都宽松——这时候八成是网卡或协议栈卡住了。
- 别只看平均值:用
sar -n DEV 1 5而不是sar -n DEV,秒级采样才能抓到突发流量尖峰 - 注意单位:
sar默认是 kB/s,不是 Mbps;换算时记得 ×8 得到近似带宽(如 10000 kB/s ≈ 80 Mbps) - 云主机要小心:阿里云/腾讯云等平台的“内网带宽”是软限制,
txkB/s持续 >80% 就可能触发限速,不报错但延迟飙升
哪个进程在偷偷发包?用 nethogs 定位真实元凶
iftop 只能看到 IP+端口对,但不知道背后是哪个进程;nethogs 才是真正按进程维度统计实时网络吞吐的工具。
使用场景:上线新版本后出网流量陡增、容器里某个 Pod 突然占满带宽、怀疑有后台同步任务未收敛。
启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。
- 安装后必须加
-d参数指定刷新间隔,否则默认 1 秒太慢:nethogs -d 1 - 按
q退出,按m切换显示单位(KB/s → MB/s),避免误判小数点 - 容器环境需在宿主机运行,且确保
/proc/[pid]/net/dev可读;Kubernetes 中若看到pause进程占高,说明是其所属 Pod 内其他容器在发包
ss -i 比 netstat 更快查 TCP 连接质量
当怀疑是协议栈层问题(如重传多、窗口缩、RTT 高),ss -i 是目前最轻量、最准的现场诊断命令——它直接读取内核 socket 结构体,不走 procfs 解析,延迟低、精度高。
典型错误现象:HTTP 请求偶发 3s 超时、curl 偶尔卡住、TCP 重传率上升但无丢包。
-
ss -tini | grep -E "(retrans|rtt|cwnd)"快速筛出异常连接;重点关注retrans(重传次数)、rtt(当前 RTT 值)、cwnd(拥塞窗口) -
ss -tulnp查监听端口时,-n关闭 DNS 解析,避免因 DNS 卡顿导致命令假死 - 别用
netstat -s查全局统计:它汇总的是整个生命周期数据,掩盖了当前活跃连接的问题
为什么改了 net.core.somaxconn 还是拒绝连接
这个参数只是 TCP 全连接队列长度上限,真正起作用的前提是应用调用 listen() 时传入的 backlog 参数没被内核截断。很多框架(如 Node.js 的 server.listen(port)、Go 的 net.Listen)默认 backlog=128,即使你把 net.core.somaxconn 改成 65535,实际队列仍卡在 128。
- 检查生效值:
ss -lnt输出中第 3 列(Recv-Q)是当前全连接队列长度,第 4 列(Send-Q)才是somaxconn设置值 - Java 应用需显式设置:
ServerSocket(int port, int backlog);Spring Boot 可配server.tomcat.accept-count - 云上 LB 后端要注意:SLB/Traefik/Nginx 的 upstream keepalive 连接复用不足时,短连接洪峰会瞬间打爆全连接队列,光调内核参数没用
网络瓶颈最难的不是发现,而是区分「是网卡真饱和」还是「协议栈处理不过来」——前者看 sar 和 nethogs,后者必须进 ss -i 和 /proc/net/snmp 看重传、乱序、SACK 统计。少一个环节,就容易把 TCP 层问题当成带宽问题去扩容。










