linux服务器负载高排查

问题

业务服务器每天在固定的时间段负载高 2cpu,load >4 ,持续 10 分钟,导致网络响应时间长,产生异常告警。需要分析原因,排除问题。

处理

通过 uptime,top 查看到的 load average 字段即为系统负载,反应系统总体运行情况。负载高低判断标准与 CPU 核数相关,系统运行良好情况下 负载<CPU 核数。

1
2
[app@localhost ~]$ uptime
15:07:27 up 23 days, 46 min, 7 users, load average: 0.00, 0.02, 0.05

cpu 负载是系统的综合指标,主要是由于 CPU 使用、内存使用、IO 消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。分析哪个因素导致负载高,可使用 vmstat 命令。

1
2
3
4
5
6
7
8
9
# vmstat [options] [delay [count]]
[app@localhost ~]$ vmstat 1 5
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 12056 236804 0 677688 0 0 0 6 21 12 1 0 98 0 0
0 0 12056 236804 0 677688 0 0 0 0 160 285 1 0 99 0 0
0 0 12056 236804 0 677688 0 0 0 284 172 305 0 2 91 7 0
0 0 12056 236804 0 677688 0 0 0 0 156 263 1 0 99 0 0
0 0 12056 236804 0 677688 0 0 0 0 137 234 0 0 100 0 0

观察 zabix 监控,发现异常时间点 cpu us 较高,可能由于用户程序繁忙,导致 cpu 利用率高,导致负载高,导致网络延迟大。

参数含义

procs
r 列:表示运行和等待 CPU 时间片的进程数,如果长期大于 1,说明 CPU 不足,需要添加 CPU。
b 列:表示在等待资源的进程数,比如正在等待 I/O、或则内存交换等。
cpu
cpu us 列:显示用户空间所花费 CPU 时间的百分比。us 值比较高时,说明用户进程小号 CPU 时间多,如果长期大于 50%,考虑优化用户程序。
cpu sy 列:显示内核空间花费 CPU 时间百分比。us+sy 如果大于 80%,表明 cpu 不足。
cpu id 列:cpu 处于空闲状态百分比。
cpu wa 列:显示 IO 等待所占用 CPU 时间百分比。参考值 30,如果>30,表明 IO 等待严重。
system: 显示采集间隔内发生的中断数
in 列:表示在某一时间间隔中观测到的每秒设备中断数。
cs 列:表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory
swpd: 切换到内存交换区的内存数量 (k 表示)。如果 swpd 的值不为 0,或者比较大,比如超过了 100m,只要 si、so 的值长期为 0,系统性能还是正常
free: 当前的空闲页面列表中内存数量 (k 表示)
buff: 作为 buffer cache 的内存数量,一般对块设备的读写才需要缓冲。
Cache: 作为 page cache 的内存数量,一般作为文件系统的 cache,如果 cache 较大,说明用到 cache 的文件较多,如果此时 IO 中 bi 比较小,说明文件系统效率比较好。
swap
si: 由内存进入内存交换区数量。
So:由内存交换区进入内存数量。
IO
bi: 从块设备读入数据的总量(读磁盘)(每秒 kb)。
Bo: 块设备写入数据的总量(写磁盘)(每秒 kb)

参考链接
https://hacpai.com/article/1534296747744