Linux下检测CPU负载最直接方式是读取/proc/loadavg获取1/5/15分钟平均负载,并与nproc获取的实际CPU核心数比较;负载>核心数×0.9预警,>核心数×1.5严重,脚本用bc做浮点比较并返回对应退出码。

Linux 下检测 CPU 负载最直接的方式是读取 /proc/loadavg 或用 uptime、top -bn1 等命令提取负载值,再结合阈值判断是否异常。脚本不需要复杂逻辑,重点在于准确获取 1/5/15 分钟平均负载,并与当前 CPU 核心数对比(因为负载 > 核心数通常意味着排队任务增多)。
获取实时负载值
Linux 的 /proc/loadavg 第一列就是 1 分钟平均负载,可用 awk 快速提取:
-
awk '{print $1}' /proc/loadavg→ 输出类似0.42 - 也可用
uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//',兼容性稍好但稍冗长 - 注意:负载值不是百分比,而是“就绪态任务数”的平均值,需和 CPU 核心数比较才有意义
自动获取 CPU 核心数
避免硬编码核心数,用 nproc 或 grep -c '^processor' /proc/cpuinfo 获取实际可用核心数:
-
nproc最简洁,返回当前 shell 可用的处理单元数(考虑 cgroup 限制) -
grep -c '^processor' /proc/cpuinfo返回物理+逻辑核心总数(如超线程开启会翻倍) - 一般建议用
nproc,更贴近实际调度能力
设置合理告警阈值
CPU 负载是否过高不能只看绝对值,要结合核心数动态判断:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 负载
≤ 核心数 × 0.7:正常 - 负载
> 核心数 × 0.9:预警(可能有慢查询、IO 等待) - 负载
> 核心数 × 1.5:严重(大量任务排队,响应延迟明显) - 示例:4 核机器,1 分钟负载 > 6 就该关注;8 核机器 > 12 才算严重
写一个可直接运行的检查脚本
以下是一个轻量、无依赖的 Bash 脚本,保存为 check_cpu_load.sh,加执行权限后即可运行:
#!/bin/bash
LOAD=$(awk '{print $1}' /proc/loadavg)
CORES=$(nproc)
THRESHOLD=$(echo "$CORES * 0.9" | bc -l)
<p>if (( $(echo "$LOAD > $THRESHOLD" | bc -l) )); then
echo "⚠️ CPU 负载偏高: ${LOAD} (核心数: ${CORES}, 阈值: ${THRESHOLD})"
exit 1
else
echo "✅ CPU 负载正常: ${LOAD} (核心数: ${CORES})"
exit 0
fi
说明:bc 用于浮点比较,若系统无 bc,可改用整数近似(如 $(printf "%.0f" $THRESHOLD) 后用整数比较)。
集成到监控或定时任务
脚本退出码(0 正常 / 1 异常)便于集成:
- 配合
cron每 5 分钟检查:*/5 * * * * /path/check_cpu_load.sh >> /var/log/cpu-check.log 2>&1 - 配合 Zabbix、Prometheus Node Exporter 或自建 HTTP 接口时,可输出 JSON 格式供采集
- 若需长期趋势,建议搭配
mpstat(sysstat 包)采集更细粒度的 %user/%system/%iowait

















