从现象、资源到进程逐层排查,避免看到高 CPU 就盲目扩容。
核心思路
先确认影响范围和时间窗口,再观察负载、CPU、内存、磁盘与网络。区分 CPU 使用率与运行队列,区分缓存占用与真实内存压力。
落地步骤
找到异常进程后结合日志、调用栈和版本变更验证假设。一次只调整一个变量,并记录前后指标,才能判断优化是否有效。
验证清单
实施后不要只确认“能运行”,还应检查错误率、延迟、资源占用和异常路径。把验证命令、预期结果和回滚方式写进变更记录,后续维护会轻松很多。
小结
好的工程实践不是堆叠工具,而是用清晰边界、可观察结果和可逆变更降低长期成本。先解决最重要的问题,再逐步自动化。
可执行实践
先记录故障时间和影响,再用 uptime、vmstat 1、iostat -xz 1、pidstat 1 区分 CPU、内存、磁盘和进程问题。结论必须结合同一时间窗口的应用指标。
验证与退出条件
修改参数前保存基线,一次只改一个变量。CPU 高要区分 user、system、iowait 与运行队列;内存高要区分 page cache 和实际回收压力。
实践场景
以“定位一台服务器响应变慢的首个瓶颈”为例。实施前先保存当前版本、配置和关键指标基线,写明成功条件与停止条件;涉及生产数据或外部写入时,先在隔离环境验证。
分步实施
先确认时间窗口和负载变化,再依次看 CPU、运行队列、内存回收、磁盘等待和网络;用进程维度验证系统级信号。每完成一步都记录可观察结果,不把命令返回零等同于业务正确。
故障演练
制造 CPU 密集、内存压力和慢磁盘三种负载,比较指标特征,避免见到高 load 就只归因 CPU。演练应使用可清理的测试数据,并验证告警、日志和恢复路径,而不只是确认系统最终又能访问。
观测与回滚
保存基线与故障快照;调参前记录原值,收益不明确立即恢复并停止叠加修改。变更单中应写清负责人、观察窗口、阈值和回滚触发器,避免故障发生后再临时争论。
完成后把使用的版本、关键命令、观测窗口和结果写入变更记录。没有验证证据的“已完成”不能作为上线结论。
第二轮实践复核
可复用交付物: 基线快照、故障窗口和瓶颈假设表。复用时先固定软件版本、依赖锁文件、测试数据规模和运行环境;文章中的命令包含占位符,必须替换成自己的非生产目标后再执行。
最低验证: uptime; vmstat 1 5; iostat -xz 1 5; cat /proc/pressure/{cpu,memory,io}
执行记录要保存命令、退出码、关键输出、观察窗口和回滚结果。若验证会产生写入,先使用隔离环境或 dry-run;任何失败都不能通过扩大权限、关闭校验或跳过测试来“解决”。
完整实战:API 延迟突然翻倍
先问四件事:用户影响何时开始、哪些请求受影响、同期发布/流量有什么变化、资源是否接近容量。不要看到 CPU 高就先扩容;高 CPU 可能是有效吞吐,也可能是自旋、GC 或压缩工作。
1 | uptime |
命令需按发行版安装对应工具。第一次采样保存原始输出和时间范围,后续所有证据围绕同一窗口对齐。
USE 方法逐层排查
| 资源 | Utilization | Saturation | Errors |
|---|---|---|---|
| CPU | user/system/iowait | run queue、steal | 硬件/调度异常 |
| 内存 | working set、cache | reclaim、swap | OOM、分配失败 |
| 磁盘 | throughput、busy | await、queue depth | I/O 错误、超时 |
| 网络 | bandwidth、pps | drop、retransmit | 接口错误、连接失败 |
| 连接池 | active/idle | waiters、等待时间 | timeout、拒绝 |
load average 不是 CPU 百分比,它还可能包含不可中断等待。free 中 cache 不等同于不可用内存;是否存在压力要结合 reclaim、swap、PSI 和应用行为。磁盘 %util 在并行设备上也不能单独解释饱和度,应一起看延迟和队列。
从主机到进程再到代码
确认瓶颈资源后定位进程、线程和调用栈。CPU 问题用 profile/flame graph,I/O 问题对齐块设备延迟与应用慢请求,内存问题比较 RSS、堆、page fault 与 OOM 记录。采样工具本身有成本,生产上先低频、短窗口并记录权限和影响。
用受控压测复现相同流量和数据分布,分别测试 CPU 限额、磁盘延迟、连接池耗尽与依赖超时。验收看业务吞吐、P95/P99、错误率以及资源饱和度是否一起改善。止损可以是限流、降级或扩容;内核参数与持久配置变更单独灰度,回滚时恢复原值并再次采样,而不是用重启清空证据。
一手资料
资料与版本边界复核日期:2026-08-22。工具行为可能演进,实施前以锁定版本对应的官方文档为准。
评论