我们的指标框上的 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 使用率调至“正常”水平?
编辑
答案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 网络接口驱动程序是出了名的错误多多。