性能分析:CPU、内存、IO
场景
服务器变慢,但不知道卡在 CPU、内存还是磁盘。
前置条件
- 有 root 或 sudo
- 装了
sysstat(sar/iostat)、procps(top/vmstat) - 知道业务高峰时段
配置
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 " |
验证
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 才能看到函数名,否则全是地址。