CPU问题-平均负载
一、平均负载介绍
- 概念:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
- 反映的是整体的负载情况
- 平均负载最理想的情况是等于 CPU 个数
- 在实际生产环境中,平均负载的值分析:
- 当平均负载高于 CPU 数量 70% 的时候,就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
- 但 70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,再去做分析和调查。
二、查看平均负载的工具
在查看平均负载中可以用到的工具:
-
uptime:最简单
-
top:提供了更全的指标,界面简单,不够直观,交互性差
-
htop:提供了更直观的界面和更丰富的交互功能,允许用户使用鼠标进行交互操作
-
命令结果介绍
[root@zilong ~]# uptime 11:01:53 up 4 days, 19:26, 2 users, load average: 0.08, 0.04, 0.05
命令的分析:
- 如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
- 如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。
- 如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。
三、找出平均负载升高的根源
- 平均负载升高的根源:
- CPU 密集型进程,使用大量 CPU 会导致平均负载升高,cpu使用率也会升高;
- I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
- 大量进程等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
- 使用到的工具:sysstat包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们会用到这个包的两个命令 mpstat 和 pidstat。
- mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
- pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。
- 找出根源的方法:
- 执行命令
watch -d uptime
如果平均负载的值远远高于cpu的个数 - 执行命令
mpstat -P ALL 5 1
-----查找平均负载升高的原因- 如果用户空间的cpu使用率非常高,接近或者达到100%,iowait 的值较低
- 执行命令
pidstat -u 5 1
观察%wait 列,出现大量进程数值非常高-----判断为大量进程否则为CPU 密集型进程
- 执行命令
- 如果系统cpu使用率高,iowait的值非常高------判断为I/O密集型进程
- 如果用户空间的cpu使用率非常高,接近或者达到100%,iowait 的值较低
- 执行命令
- 解决问题:
- 执行命令
pidstat -u 5 1
根据问题类型找到相应的进程 - 结合该进程的日志信息,分析问题
- 执行命令