0. 写在前面:为什么你需要“神器”而非“常用命令
把系统从「慢」变成「稳」有时候不需要大折腾,而是把最显著的瓶颈找出来。下面是一套我常用的方法.
先说一句话的心法:先把用户感受恢复,再去追根溯源。很多时候临时的减害手段(降级、限流、回滚、切流)比立刻找根因更重要。下面分三类瓶颈:CPU、内存、IO(含磁盘与网络),每类给出诊断命令、常见判别依据、应急缓解和长期修复建议。
常用工具速览(先熟悉这些工具)
这些命令几乎是现场救火的工具箱,建议熟练掌握:
top, htop, vmstat, mpstat, pidstat, ps, perf, strace, pstack
free, slabtop, smem
iostat, iotop, blktrace, lsblk, df, du, smartctl
ss, netstat, iftop, iperf3, tc
sar (sysstat), dstat, atop
tcpdump (小心会产生日志)
我常把一台机器的检查脚本写成几行命令串,先快速跑一遍,得出第一轮结论,再深入。
一:CPU 瓶颈 — 如何判断与处理
诊断思路
看整体负载(load)只是起点,关键是区分:是用户态占满、内核态占满、还是等待 I/O(iowait)、或是被虚拟化的 steal(被抢占),再决定对症下药。
现场诊断命令(顺序执行,快速采样)
# 1) 快速看系统负载与总体 CPU 使用
$ top -b -n1 | head -n5
top - 11:30:00 up 12 days, 2:01, 1 user, load average: 12.34, 11.98, 10.12
%Cpu(s): 92.0 us, 3.0 sy, 0.0 ni, 2.0 id, 3.0 wa
# 2) 更细:每个 CPU 的使用(查看是否存在核不均衡)
$ mpstat -P ALL 1 1
Linux 5.4.0 (host) 08/10/2025 _x86_64_ (8 CPU)
08:30:01 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
08:30:01 AM all 92.0 0.00 3.0 3.0 0.0 0.0 0.0 0.0 2.0
08:30:01 AM 0 99.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
08:30:01 AM 1 85.0 0.0 6.0 0.0 0.0 0.0 0.0 0.0 9.0
...
# 3) 找出占用最严重的进程
$ ps aux --sort=-%cpu | head -n 8
root 23456 95.0 1.2 123456 78900 ? R 11:29 120:00 /usr/bin/myapp --worker
判别:
•
%usr高,且某个进程占比高 → 进程计算密集(业务逻辑/算法);•
%sys高 → 内核开销高(例如频繁上下文切换、网络/磁盘中断);•
%iowait高 → 可能是 IO 瓶颈(继续看 IO 部分);•
%steal高 → 虚拟化宿主被抢占(云主机需联系云厂商或扩容)。
应急缓解(先恢复服务可用性)
1. 临时降级或限流:在流量入口(Nginx、LB)做限流或返回降级页面,果断减少负载。
2. 迁移/扩容:把部分实例从流量池摘除、扩容实例数或增加容器副本(Kubernetes):
# k8s 临时扩副本
$ kubectl scale deployment myapp --replicas=10 -n prod
deployment.apps/myapp scaled
3. 进程优先级调整/隔离:对非关键进程
renice或把关键进程绑定到空闲核taskset:
# 优先级调低(

最低0.47元/天 解锁文章
220

被折叠的 条评论
为什么被折叠?



