虚拟机 CPU 使用率达到 100%

虚拟机 CPU 使用率达到 100%

我们的指标框上的 CPU 使用率间歇性地达到 100%,导致:
在呈现 Grafana 仪表板时出现“内部服务器错误”

我们的机器上运行的唯一应用程序是带有 3 个子容器的 Docker

  • 顾问
  • 石墨

  • 格拉法纳

机器规格
操作系统版本 Ubuntu 16.04 LTS
版本 16.04 (xenial)
内核版本 4.4.0-103-generic
Docker 版本 17.09.0-ce
CPU 4 核
内存 4096 MB
内存预留无限制
网络适配器 mgnt

贮存
驱动程序 overlay2
支持文件系统 extfs
支持 d_type true
本机覆盖差异 true

内存交换限制为 2.00GB

以下是 cAdvisor 的一个片段:

在此处输入图片描述

kworker 和 ksoftirqd 进程的状态不断从“D”变为“R”,再变为“S”

机器规格是否适合此设置?
如何才能将 CPU 使用率调至“正常”水平?

编辑

将内存从 4GB 增加到 8GB 后,它可以按预期运行几天,但随着时间的推移,CPU 使用率增加:
在此处输入图片描述

答案1

有 4 个 ksoftirqd 占用了 39% 的 CPU。这个比例相当高,可能表明存在许多问题,例如 I/O 负载过高、电源管理问题或内核/设备驱动程序错误。

尝试更新到最新的内核,确保选择了适当的变体(例如,有专门针对 AWS 和 Azure 调整的 Ubuntu 内核),并查看一些 Linux I/O 性能故障排除工具。

关于 Linux 性能故障排除的一个很好的资源通常是Brendan Gregg 的博客

答案2

看起来内核正在使用大量 CPUkworker线程,这通常是由有缺陷的内核驱动程序引起的。

要进行调试,请使用 触发回溯echo l > /proc/sysrq-trigger,这将导致在 中生成输出dmesg。运行几次以查看是否一致。基于此主题哪个驱动程序导致高负载可能很明显。有一种想法是,如果您在 ESXi 上运行此程序,则 e1000 网络接口驱动程序是出了名的错误多多。

相关内容