系统工程

Linux 性能排查的正确顺序

2026-08-01 #排障#性能优化#Linux

从现象、资源到进程逐层排查,避免看到高 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
2
3
4
5
uptime
vmstat 1 10
pidstat -dur 1 10
iostat -xz 1 10
ss -s

命令需按发行版安装对应工具。第一次采样保存原始输出和时间范围,后续所有证据围绕同一窗口对齐。

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。工具行为可能演进,实施前以锁定版本对应的官方文档为准。

评论
分享

评论