判断服务器负载过高可从系统负载、CPU、内存、磁盘 I/O、网络五个核心维度切入,结合工具命令和关键指标阈值综合分析。
一、系统负载判断(核心指标)
系统负载反映服务器整体繁忙程度,包含 CPU、内存、I/O 等综合压力。
工具命令:
uptime 或 w
-
关键指标:load average: 1.80 1.50 1.20(分别代表 1 分钟、5 分钟、15 分钟平均负载)
-
判断标准:
1、若负载值持续超过服务器CPU 核心数(可通过nproc查看核心数),说明系统处于高负载状态。
- 例:4 核 CPU,1 分钟负载持续 > 4,表明 CPU 处理能力饱和,任务需排队。
2、对比三个时间维度的负载:
- 1 分钟负载 > 5 分钟 / 15 分钟负载:负载正在上升,需警惕。
- 1 分钟负载 < 5 分钟 / 15 分钟负载:负载正在下降,压力缓解。
二、CPU 负载判断
CPU 是处理任务的核心,高 CPU 占用会导致任务执行缓慢。
工具命令:
top:实时查看 CPU 使用率(按P键按 CPU 占用排序)。
mpstat -P ALL 1:查看每个 CPU 核心的详细使用率(1 秒刷新一次)。
关键指标:
%us(用户态 CPU 占比):应用程序消耗的 CPU,若持续 > 70%,说明应用计算密集,需优化代码。
%sy(系统态 CPU 占比):内核处理任务的 CPU 消耗,若持续 > 30%,可能是内核调用频繁(如频繁 IO 操作、线程切换过多)。
%id(空闲 CPU 占比):若持续 < 10%,说明 CPU 资源严重不足。
三、内存负载判断
内存不足会导致系统使用磁盘 swap 分区,大幅降低性能。
工具命令:
free -h:以易读单位显示内存使用情况(-h表示 GB/MB)。
vmstat 1:查看内存交换(swap)情况。
关键指标:
available(可用内存):若持续低于总内存的 10%,说明内存紧张。
Swap used(交换分区使用量):若 swap 使用率 > 20%,且vmstat中si(swap in,内存页从磁盘换入)、so(swap out,内存页换出到磁盘)数值持续非 0,表明内存不足,系统频繁进行内存交换。
四、磁盘 I/O 负载判断
磁盘读写速度远低于内存,I/O 瓶颈会导致数据读写延迟。
工具命令:
iostat -x 1:查看磁盘 I/O 详细性能(1 秒刷新一次)。
df -h:查看磁盘空间使用率。
关键指标:
%util(磁盘利用率):若持续 > 80%,说明磁盘处于满负荷工作状态,读写请求排队。
await(平均 I/O 等待时间):正常应 <20ms,若持续> 50ms,说明磁盘响应缓慢(可能是磁盘老化或读写请求过多)。
磁盘空间:df -h中某分区使用率 > 90%,会导致无法写入数据,甚至应用崩溃。
五、网络负载判断
网络带宽饱和或连接异常会影响服务通信。
工具命令:
ifstat 1或 nload:实时查看网络接口的收发速率。
netstat -an | grep ESTABLISHED | wc -l:统计当前建立的 TCP 连接数。
ping/traceroute:测试网络连通性和延迟。
关键指标:
带宽使用率:若收发速率持续接近服务器网卡带宽(如 1G 网卡,速率持续 > 900Mbps),说明带宽饱和。
连接数:若 ESTABLISHED 连接数远超应用设计上限(如预期支持 1000 连接,实际达 5000),可能导致端口耗尽或服务无法响应新请求。
网络延迟:ping目标服务器的延迟 > 100ms,或丢包率 > 1%,说明网络链路存在问题。
总结:综合判断逻辑
先用uptime看整体负载,若超过 CPU 核心数,再分维度排查。
按 "CPU→内存→磁盘 I/O→网络" 的顺序逐一验证,定位瓶颈点。
结合应用日志(如 Java 的logs、Nginx 的access.log),确认高负载是否由应用异常(如死循环、内存泄漏、请求突增)引发,而非硬件资源不足。