0. 写在前面:为什么你需要“神器”而非“常用命令”
在日常排障中,ping
、telnet
、netstat
早已耳熟能详,但当故障如幽灵般偶现、如深渊般难测时,你需要的是能洞穿表象、直抵内核的“神器”。
本文将带你深入五个少为人知却威力无穷的 Linux 工具,每一个都配以真实可落地的案例,并模拟逐行控制台操作,让你边看边练,随学随用。
mtr
—— 动态 traceroute,路由波动的显微镜静态 traceroute 只能给你一张“快照”,而 mtr 是一部“实时纪录片”。
出口带宽偶发抖动,用户投诉“卡”,但 traceroute
只能看到一条静态路径,无法判断哪一跳在持续丢包。
# 安装
sudo apt-get install mtr -y
# 实时监测到 8.8.8.8 的路径与丢包
mtr -r -c 100 8.8.8.8
HOST: ubuntu Loss% Snt Last Avg Best Wrst StDev
1. 192.168.1.1 0.0% 100 1.1 1.2 0.9 2.5 0.3
2. 100.64.0.1 0.0% 100 3.4 3.7 3.1 6.2 0.6
3. 202.96.209.133 15.0% 100 10.2 11.5 9.8 45.6 5.8
4. 202.97.35.69 0.0% 100 11.1 12.3 10.9 33.4 3.7
第三跳出现 15% 丢包,持续恶化,锁定运营商骨干问题。
iftop
—— 带宽占用的“热力图”当带宽被神秘流量占满,iftop 让你一眼看见“谁偷走了比特”。
服务器出口带宽告警,但 nload
只能看到总量,无法定位具体连接。
# 安装
sudo apt-get install iftop -y
# 指定网卡,实时查看连接级流量
sudo iftop -i eth0 -nP
12.5Mb 25.0Mb 37.5Mb 50.0Mb 62.5Mb
└────────────┴────────────┴────────────┴────────────┴→
192.168.1.10:22 => 192.168.1.100:52340 5.12Mb
192.168.1.10:3306 => 192.168.1.101:42872 2.34Mb
发现 192.168.1.100 的 SSH 会话占满带宽,立即限速解决问题。
tcpdump
+ Wireshark —— 微观世界的“手术刀”当一切指标正常,唯有抓包能揭开 TCP 重传、窗口阻塞的隐秘角落。
HTTPS 偶发 503,但后端日志无异常,怀疑握手阶段问题。
# 抓指定主机 + 端口,保存为 pcap
sudo tcpdump -i any -w /tmp/https.pcap host 10.0.0.5 and port 443
# 本地用 Wireshark 打开,过滤 ssl.handshake.type == 1
No. Time Source Destination Protocol Info
4 0.002134 10.0.0.100 10.0.0.5 TLSv1.2 Client Hello
5 0.002200 10.0.0.5 10.0.0.100 TCP [ACK] Seq=1 Ack=518
6 0.003500 10.0.0.5 10.0.0.100 TLSv1.2 Server Hello, Certificate
...
23 0.005800 10.0.0.100 10.0.0.5 TCP [RST, ACK] Seq=1200 Ack=1
发现客户端在收到证书后立即 RST,原因是本地时间错误导致证书验证失败。
ss -eipn state syn-recv
—— SYN Flood 的“照妖镜”当连接数暴涨,ss 能直接告诉你谁在半连接洪水攻击。
Nginx 报 “connection pool full”,但 netstat
输出冗长难辨。
# 仅显示 SYN-RECV 状态的套接字
ss -eipn state syn-recv | head
State Recv-Q Send-Q Local Address:Port Peer Address:Port
SYN-RECV 0 0 10.0.0.5:80 203.0.113.45:48302
cubic wscale:7,7 rto:201 rtt:1.2/0.6 ato:40 mss:1460 rcvmss:536 advmss:1460
大量同一源地址的 SYN-RECV,确认攻击;立即上
iptables
限速。
ncat
—— 一键构建“临时服务端”无需写代码,ncat 能在 10 秒内帮你验证“端口到底通不通”。
新部署的 gRPC 服务监听 50051,但负载均衡器健康检查失败。
# 在服务器 A 启动临时监听
ncat -l 50051 --keep-open --exec "/bin/echo pong"
# 在客户端 B 测试连通性
nc -v 10.0.0.5 50051
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.5:50051.
pong
立即证明链路通畅,问题定位到负载均衡器配置错误。
网络故障如战场迷雾,肉眼可见的只是表象; 当你手握 mtr、iftop、tcpdump、ss、ncat 这五把“神器”,便拥有了透视时空的显微镜、丈量比特的刻度尺、解剖数据包的手术刀。 愿你在下一次报警响起时,不再慌乱,而是从容地敲下一行命令,让真相在指尖流淌。
这里我先声明一下,日常生活中大家都叫我波哥,跟辈分没关系,主要是岁数大了.就一个代称而已. 我的00后小同事我喊都是带哥的.张哥,李哥的. 但是这个称呼呀,在线下参加一些活动时.金主爸爸也这么叫就显的不太合适. 比如上次某集团策划总监,公司开大会来一句:“今个咱高兴!有请IT运维技术圈的波哥讲两句“ 这个氛围配这个称呼在互联网这行来讲就有点对不齐! 每次遇到这个情况我就想这么接话: “遇到各位是缘分,承蒙厚爱,啥也别说了,都在酒里了.我干了,你们随意!” 所以以后咱们改叫老杨,即市井又低调.还挺亲切,我觉得挺好.
运维X档案系列文章:
老杨的关于AI的号