Oamc

性能分析: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 才能看到函数名,否则全是地址。