0aa8fe6
这次没有正文改动。
这是 linux/性能分析:CPU、内存、IO.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
42afade
@@ -0,0 +1,75 @@ +--- +tags: [性能, sar, perf, Linux] +order: 105 +--- + +# 性能分析:CPU、内存、IO + +## 场景 + +服务器变慢,但不知道卡在 CPU、内存还是磁盘。 + +## 前置条件 + +- 有 root 或 sudo +- 装了 `sysstat`(sar/iostat)、`procps`(top/vmstat) +- 知道业务高峰时段 + +## 配置 + +```bash +dnf install -y sysstat perf + +# 实时总览 +top # 按 1 看每核,按 c 看完整命令行 +vmstat 1 10 + +# CPU +pidstat -u 1 5 +perf top + +# 内存 +free -h +vmstat -s + +# 磁盘 IO +iostat -xz 1 5 +iotop -o + +# 历史数据 +sar -u 1 5 +sar -r 1 5 +sar -d 1 5 +sar -n DEV 1 5 +``` + +判断方向: + +| 现象 | 可能原因 | +| --- | --- | +| `us` 高 | 应用计算密集,看 `perf top` 的热点函数 | +| `sy` 高 | 系统调用多,看是不是网络/文件操作太碎 | +| `wa` 高 | 磁盘成瓶颈,看 `iostat -x` 的 `%util` 和 `await` | +| 内存不足 | `swap` 使用增长、频繁 `si/so` | +| `load` 高但 CPU 不高 | IO 等待或 D 状态进程,`ps aux | grep " D "` | + +## 验证 + +```bash +sar -u -f /var/log/sa/sa今天 +iostat -x 1 3 +pidstat -d 1 5 +``` + +## 回滚 + +只读操作,无副作用。`perf` 采集数据会占一点 CPU,跑完 Ctrl+C 即可。 + +## 坑 + +- **只看 `top` 的第一行**,不看每核,单核打满会漏掉。 +- `wa` 高不一定是磁盘坏,也可能是文件系统缓存不足。 +- `free` 的 `available` 才是可用内存,别被 `free` 列吓到。 +- `iostat -x` 的 `%util` 接近 100% 才是真饱和,`await` 高说明队列在排。 +- `sar` 默认只保留 7 天,`/etc/sysconfig/sysstat` 里可以调。 +- `perf` 需要 debuginfo 才能看到函数名,否则全是地址。