load average 不是 CPU 使用率
一句话总结
Linux 负载平均值不仅统计等待 CPU 的任务,也统计等待磁盘或 NFS 的不可中断 D 状态任务,因此 CPU 空闲时负载仍可能很高。
诊断思路
利用率是百分比,负载是任务数量。内核周期性统计正在运行、等待运行以及 D 状态任务,并以指数衰减计算 1、5、15 分钟平均值。短期值高于长期值表示负载正在上升,反之通常表示恢复中。
高负载时应先分别统计 R 与 D:R 多才表示 CPU 队列拥挤,D 多则应检查块设备、NFS、页缓存锁等。诊断要结合运行队列、阻塞任务、I/O 等待、设备延迟和队列深度,不能仅凭一个 load 数字扩容 CPU。
原文命令与标识符
nr_active = 실행 중이거나 실행 대기(R) + 중단 불가 대기(D)
cat /proc/loadavg # 네 번째 필드 '실행가능/전체'를 함께 본다
ps -eo state --no-headers | sort | uniq -c # R 과 D 를 센다
vmstat 1 5 # b 열이 D 상태 개수, wa 가 I/O 대기 비율
iostat -x 1 3 # await 와 큐 깊이로 판단 (%util 100% 는 포화가 아닐 수 있다)
vmstat 1 5
# r b swpd free buff cache si so bi bo in cs us sy id wa st
top -H -p <pid> # 스레드 단위
pidstat -t -p <pid> 1
cat /sys/fs/cgroup/cpu.stat # nr_throttled, throttled_usec
24.31, 22.08, 14.95
top
TASK_UNINTERRUPTIBLE
nproc
cpu.stat
nr_throttled / nr_periods
top
st
reboot
/proc/pressure/{cpu,io,memory}
some
full
io
full avg10=61
load average
top
vmstat
r
b
r
b
wa
st
nproc
nproc
cpu.max
nr_throttled
wa
iostat -x 1
await
%util
/proc