通过 top 可以快速判断:
· 内存问题:看 free 内存和 swap used
· CPU 问题:看 id 空闲率和 us/sy 使用率
· 磁盘 I/O 问题:看 wa 等待率和 D 状态进程
经验法则:
· wa > 10% = 磁盘 I/O 瓶颈
· id < 20% = CPU 资源紧张
· swap used > 0 = 内存压力
· load average > CPU核心数 = 系统过载
一、服务器负载高
系统负载(load average)反映的是等待CPU资源的进程数量,而不仅仅是CPU的使用率。高负载可能由CPU、内存或I/O瓶颈引起。
定义:单位时间内,处于运行状态或不可中断睡眠状态(如等待磁盘 I/O)的进程数量的平均值。
查看指令:uptime && top
输出:load average: 0.65, 0.72, 0.80
最近1分钟、5分钟、10分钟的平均负载
判断标准:负载值<CPU核心数------>正常
负载值>CPU核心数------>系统可能过载
查看CPU核心数:nproc 或者 lscpu | grep "CPU(s)"
举例:
$ uptime
14:30:10 up 10 days, 1:20, 1 user, load average: 6.20, 5.90, 5.75
$ nproc
4
服务器是 4 核 CPU,而1分钟负载已经是 6.20,说明系统过载。
二、CPU使用率过高判断
查看指令 top && nproc &&lscpu
重点关注:
● %Cpu(s) 行:查看 us(用户态 CPU 占用)、sy(系统态 CPU 占用)
● us + sy 如果 > 80%,说明 CPU 是瓶颈
%Cpu(s): 85.3 us, 10.2 sy, 0.0 ni, 3.1 id, 0.5 wa, 0.0 hi, 0.9 si, 0.0 st
us+sy=85.3+10.2=95.5>80,说明cpu使用率过大。
三、I/O过高导致(wa高)
查看指令:top && iostat
观察 top 中的 %Cpu(s) 行中的 wa(iowait):
■ 问题:wa>10%:有一定I/O等待,需要关注
■ 严重:wa> 20%:说明系统有大量 I/O 等待
■ 可能是磁盘读写、数据库操作、文件拷贝等导致
%C pu(s): 5.3 us, 2.1 sy, 0.0 ni, 70.2 id, 22.3 wa, 0.0 hi, 0.1 si, 0.0 st在 top 在top中查找 D 状态进程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7890 backup 20 0 1.2g 800m 100m D 0.0 5.0 1:23:45 /bin/tar -czf backup.tar.gz
7891 mysql 20 0 8.5g 3.2g 1.2g D 15.2 20.0 0:45:23 /usr/sbin/mysqld
D 状态 = 不可中断睡眠 = 进程正在等待磁盘I/O
wa是CPU等待I/O操作完成的时间百分比。wa为22.3,I/O等待严重。进程中状态S有D状态,说明进程在等待。
补充说明:
wa过高可以分为两类:
①内存不足导致的wa高
判断:内存不足------>频繁SWAP------>磁盘I/O增加------>wa升高
②纯磁盘I/O瓶颈
判断:内存充足,但wa高------>真正的磁盘性能瓶颈。
2、使用 iostat 查看具体磁盘 I/O 情况(需安装 sysstat)
iostat -x 1 3
重点关注:
● %util:磁盘使用率,接近 100% 表示磁盘繁忙
● await:I/O 请求平均等待时间,数值大说明磁盘慢
四、内存不足
查看指令: free -g && top
重点关注:
● available 是否低于总内存 10%
● Swap 是否在持续增长(使用 vmstat 1)
五、使用 vmstat 查看内存和 I/O 综合情况
查看指令:vmstat 1 5
重点关注:
● si(swap in)和 so(swap out)是否大于 0
● wa 是否大(I/O 等待)
● us + sy 是否大(CPU 占用)
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 98760 56789 5678900 0 0 100 50 100 200 5 2 92 1 0
● 如果 si/so > 0,说明 Swap 被使用,内存不足
●