linux中load average指过去1/5/15分钟内处于可运行或不可中断睡眠(d状态)的平均进程数,反映资源争抢程度;值为1.2表示平均1.2个任务在排队等待cpu或io处理,而非cpu使用率。

Linux里load average到底是什么意思
它不是CPU使用率,也不是进程数,而是“过去1/5/15分钟内,处于可运行状态或不可中断睡眠状态(D状态)的平均进程数”。简单说:有多少任务在排队等着被CPU或IO处理。值为1.2不意味着CPU用了120%,而可能表示平均有1.2个任务在争抢资源。
用uptime和top快速看load average
最轻量、最常用的方式:
uptime
输出类似:12:45:32 up 15 days, 3:22, 2 users, load average: 0.42, 0.38, 0.35——三个数字分别对应1/5/15分钟均值。
top命令启动后,第一行也显示相同三值。注意:top默认每3秒刷新,但load average是系统内核持续计算的滑动平均,不受top刷新频率影响。
- 如果只关心当前负载,
uptime比top更快、无交互开销 -
htop也能显示,但它不是所有发行版默认安装,且其load average数值来源与/proc/loadavg一致,只是做了UI美化 - 别把
load average和%Cpu(s)行里的CPU使用率混在一起读——它们反映的是不同维度的压力
从/proc/loadavg读取原始数据
这是所有工具的底层来源,内容稳定、无缓存、适合脚本解析:
cat /proc/loadavg
输出形如:0.42 0.38 0.35 1/1234 12345,其中前三个就是load average,第四个1/1234表示“当前1个进程正在运行,共1234个进程在线”,第五个是最近创建的进程PID。
- 脚本中建议直接读这文件,而不是解析
uptime输出——后者格式易受locale影响(比如中文系统会把“up”翻译成“已运行”) - 该文件权限为
-r--r--r--,普通用户可读,无需sudo - 注意:值是字符串,带小数点,做数值比较前需用
awk '{print $1}'或cut -d' ' -f1提取
负载高但CPU空闲?重点查D状态进程和IO等待
当load average > CPU核心数,但top里%Cpu(s)显示idle很高,大概率是大量进程卡在不可中断睡眠(D状态),常见于磁盘IO卡顿、NFS挂载异常、驱动bug等场景。
- 用
ps aux --sort=-pcpu | head -20看CPU大户,再用ps aux --sort=-pmem看内存大户——这两类通常不影响load average本身 - 真正关键的是:
ps -eo stat,pid,comm | grep " D ",找D状态进程(注意前后空格避免误匹配) - 配合
iostat -x 1观察%util和await,若await持续>100ms且%util接近100%,说明磁盘响应慢成了瓶颈 - 虚拟机环境还要留意宿主机资源争抢,
load average在客户机里可能虚高
load average本身不告诉你问题在哪,它只是一个触发排查的信号灯。真正耗时的往往不是计算,而是等待——尤其是那些你没法kill -9掉的D状态进程。











