判断服务器负载(Load)是否过高,不能仅看单一指标,需要结合CPU、内存、磁盘I/O、网络以及进程状态进行综合评估。
以下是判断服务器负载高低的核心维度、常用命令及阈值参考:
核心指标:Load Average(平均负载)
这是最直观的指标,表示单位时间内处于可运行状态和不可中断睡眠状态的平均进程数。
- 可运行状态:正在使用CPU或等待使用CPU。
- 不可中断睡眠:通常是在等待磁盘I/O(如读写硬盘)。
如何判断 Load Average 是否过高?
关键原则:Load Average 必须与 CPU 核心数对比。
-
计算公式:
$$ text{负载率} = frac{text{Load Average}}{text{CPU核心数}} $$ -
阈值参考:
- < 0.7:负载健康,资源充足。
- 7 – 1.0:负载较高,需要关注,但通常还能处理。
- > 1.0:负载过高,如果长期高于1.0,说明进程排队等待CPU,响应速度会变慢。
- > 5.0:严重过载,服务器可能已经无响应。
注意:Load Average 是 1分钟、5分钟、15分钟的平均值。
- 1分钟 >> 15分钟,说明负载是
突然飙升
的。- 1分钟 ≈ 15分钟,说明负载持续高位。
查看命令:
uptime# 输出示例:load average: 1.20, 0.80, 0.50# 分别代表 1分钟、5分钟、15分钟的平均负载
CPU 使用率
Load Average 反映的是“排队情况”,而 CPU 使用率反映的是“实际干活情况”。
- 用户态 (us):应用程序占用 CPU。
- 系统态 (sy):内核占用 CPU。
- 空闲 (id):CPU 空闲时间。
- 等待 I/O (wa):关键指标!
wa很高(如 > 20%),说明 CPU 在等磁盘读写,Load 高但 CPU 使用率可能不高,瓶颈在磁盘 I/O。
查看命令:
top # 按 1 键可以看到每个核心的使用情况 # 关注 %us, %sy, %id, %wa
内存使用情况
内存不足会导致频繁的 Swap(交换分区)操作,极大降低性能。
- 关键指标:
- Available:真正可用的内存(包括缓存可回收部分)。
- Swap Used:Swap 使用量持续增加,说明物理内存不足,性能会严重下降。
查看命令:
free -h # 关注 free 和 available 列,以及 swap 的 used 列
磁盘 I/O 负载
磁盘读写瓶颈会导致进程进入“不可中断睡眠状态”,从而推高 Load Average。
- 关键指标:
- %util:磁盘利用率,如果接近 100%,说明磁盘已满负荷。
- await:平均每次 I/O 请求的等待时间,如果数值很大,说明磁盘响应慢。
查看命令:
iostat -x 1 # 关注 %util 和 await 列
网络与连接数
- TCP 连接数:
TIME_WAIT或CLOSE_WAIT状态连接过多,可能耗尽端口或文件描述符。 - 带宽占用:检查是否有流量攻击或大文件传输占满带宽。
查看命令:
# 查看连接状态统计
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 查看当前连接数
ss -s
如何定位“谁”在占用负载?
当发现负载高时,需要找出具体是哪个进程导致的。
步骤 1:找到高负载进程
top # 按 P 键按 CPU 排序,按 M 键按内存排序 # 观察 PID、USER、%CPU、%MEM、COMMAND
步骤 2:查看进程详情
# 查看某个 PID 的详细信息 ps -p <PID> -o pid,ppid,cmd,%cpu,%mem # 查看线程级负载(如果是多线程应用) top -H -p <PID>
步骤 3:分析日志
查看应用日志(如 Nginx error.log、Java GC 日志、MySQL slow query log)是否有异常报错或慢查询。
快速排查流程图
uptime→ 看 Load Average 是否 > CPU 核心数。top→ 看 CPU 使用率:%us高 → 应用程序计算密集。%sy高 → 系统调用频繁(可能是锁竞争、大量小文件操作)。%wa高 → 磁盘 I/O 瓶颈(检查iostat)。
free -h→ 看内存是否不足,Swap 是否在用。iostat -x 1→ 确认磁盘是否饱和。top/ps→ 找出具体 PID,分析是哪个服务或脚本导致。
建议
- 短期突发:如果是偶尔的负载尖峰,可能是定时任务、备份、日志轮转等,可接受。
- 长期高位:必须优化代码、增加缓存、升级硬件或扩容服务器。
- 监控告警:建议部署 Prometheus + Grafana 或 Zabbix 等监控工具,设置 Load Average、CPU、内存的告警阈值,以便提前发现异常。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/483204.html



