通常我们发现系统变慢时,我们都会执行top或者uptime命令,来查看当前系统的负载情况,比如像下面,我执行了uptime,系统返回的了结果,最后一个就是系统平均负载的情况。
![图片[1]-Linux服务器当中如何查看负载情况?-编程社](https://cos.bianchengshe.com/wp-content/uploads/2024/05/image-102.png?imageMogr2/format/webp/interlace/1/quality/100)
Load Average的三个数字,依次则是过去1分钟、5分钟、15分钟的平均负载。可以通过观察这三个数字的大小,可以简单判断系统的负载是下降的趋势还是上升的趋势。
负载值一般不超过cpu核数的1-1.5倍,如果超过1.5倍,那就要重视,此时会严重影响系统。
- 如果 load average: 1.00, 5.00, 10.00 三个数字依次增大,则说明在过去的 1 分钟系统的负载比过去 15 分钟系统的负载小,表明系统的负载是下降的趋势。
- 如果 load average: 10.00, 5.00, 1.00 三个数字依次降低,则说明在过去的 1 分钟系统的负载比过去 15 分钟系统的负载大,表明系统的负载是上升的趋势。
- 如果 load average: 0.07, 0.04, 0.0 三个数字基本相同,或者相差不大, 表明系统的负载是平稳的。
平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:
- CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
- I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
- 大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
我们现在很清楚的知道导致平均负载高的情况,不只是看 CPU 的使用率,也要观察系统 I/O 等待时间高不高。
当发现平均负载升高时,可以使用 mpstat 命令查看 CPU 的性能。
# -P ALL 表示监控所有CPU,后面数字1表示间隔1秒后输出一组数据
$ mpstat -P ALL 1
Linux 2.6.32-431.el6.x86_64 (lzc) 11/05/2019 _x86_64_ (2 CPU)
07:51:45 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
07:51:50 PM all 42.90 0.00 49.39 0.41 0.00 4.56 0.00 0.00 2.74
07:51:50 PM 0 44.38 0.00 48.67 0.41 0.00 2.86 0.00 0.00 3.68
07:51:50 PM 1 41.57 0.00 49.80 0.40 0.00 6.43 0.00 0.00 1.81
从上面发现
- CPU 的用户层(%usr)使用率高达45%左右;
- CPU 的系统层(%sys)使用率高达50%左右;
- CPU 的 I/0 – 等待(%iowait)占用率为0.41%;
- CPU 的空闲率(%idle)只有2~3%。
可以推断出是由于 CPU 使用率导致平均负载升高的情况。
假设只有 CPU 的I/0 等待(%iowait)占用率高,CPU 用户层和系统层使用率很轻松,那么导致平均负载升高的原因就是 iowait 的升高。
判断了是因为 CPU 使用率升高还是 iowait 升高导致平均负载升高后,我们还需要定位是哪个进程导致的。可以用 pidstat 来查询:
# 间隔1秒后输出一组数据,-u表示CPU指标
$ pidstat -u 1
08:07:55 PM PID %usr %system %guest %CPU CPU Command
08:07:56 PM 4 0.00 1.00 0.00 1.00 0 ksoftirqd/0
08:07:56 PM 9 0.00 1.00 0.00 1.00 1 ksoftirqd/1
08:07:56 PM 11 0.00 16.00 0.00 16.00 0 events/0
08:07:56 PM 12 0.00 20.00 0.00 20.00 1 events/1
08:07:56 PM 616 7.00 6.00 0.00 13.00 1 pppoe
08:07:56 PM 2745 6.00 6.00 0.00 12.00 1 pppoe
可以发现是 events/0 和 events/1 内核进程 CPU 使用率非常高,所以可能这两个进程导致平均负载升高。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容