【线上生产问题排查-CPU篇】


前言

每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果。

在这里插入图片描述
这里的前三列相信大家都不陌生,分别代表当前时间、系统运行时间以及正在登陆的用户数,而后面三个数字,则依次为 1 分钟、5 分钟、15 分钟的平均负载(Load Average)。系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

一、平均负载是什么?

何为平均负载?许多人会认为平均负载就是单位时间内的CPU使用率,上面的0.90就代表CPU当前一分钟的平均使用率为90%。其实不然,简单来讲,平均负载指的是单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

可运行状态的进程,指的是正在使用CPU或等待CPU执行的进程,在系统中这种进程为R,也即(Running 或 Runnable),而不可中断状态指的是当前进程正陷入内核执行关键的流程,当前进程不可被中断。

那么既然平均负载指的是平均活跃进程数,那么容易想到,每个CPU都刚好
就是每个 CPU 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。
比如当平均负载为 2 时,意味着什么呢?

在只有 2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。

在 4 个 CPU 的系统上,意味着 CPU 有 50% 的空闲。

而在只有 1 个 CPU 的系统中,则意味着有一半的进程竞争不到 CPU。

因此,平均负载在不同的系统上代表的意义不一样,因此判断你的系统的平均负载是否过高的时候,还需要根据你当前系统的有多少个CPU来进行判断,这时,你也可以通过grep ‘model name’ /proc/cpuinfo | wc -l命令来读取当前系统的CPU核心数是多少

平均负载为多少时比较合理呢? 其实并没有一个准确的值,我们需要根据历史的监控数据作出相应的判断,看是否有明显升高的趋势。一般情况下当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。

二、平均负载与CPU使用率

平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。

而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:

CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;

I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;

大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

案例分析

CPU密集型进程

在虚拟机中开启三个终端,首先在第一个终端运行stress --cpu 2 --timeout 600命令,模拟一个CPU使用率高的场景

然后,在第二个终端运行uptime查看平均负载的变化情况:在这里插入图片描述
在第三个终端运行mpstat查看CPU使用率的变化情况
在这里插入图片描述
从终端二中可以看到,1分钟的平均负载慢慢增加到2,而从终端三中还可以看到,正好有一个CPU的使用率为100%,但iowait只有0,这说明,平均负载的升高正是由于CPU的使用率为100%。
在这里插入图片描述
可以看出,stress进程的CPU使用率为100%

总结

介绍了生产问题CPU的排查思路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值