我们的指标框中的 CPU 使用率间歇性地达到 100%,导致:
'内部服务器错误'渲染 Grafana 仪表板时
我们的机器上运行的唯一应用程序是带有 3 个子容器的 Docker
以下是我们的配置细节:
3个子容器运行\
cadvisor\
graphite\
grafana\
驾驶员状态\
Docker 版本 17.09.0-ce\
内核版本 4.4.0-103-generic\
操作系统版本 Ubuntu 16.04 LTS\
贮存\
驱动程序 -> overlay2\
支持文件系统 -> extfs\
支持 d_type -> true\
本机覆盖差异 -> true
内存交换限制 -> 2.00GB
以下是 cAdvisor 的一个片段:
问题:有没有什么办法可以降低 CPU 的使用率?
答案1
简短的回答是肯定的。详细的回答可能是有人试图配置容器对主机 CPU 周期的访问,但配置不正确。
默认情况下,每个容器对主机 CPU 周期的访问是不受限制的。您可以设置各种约束来限制给定容器对主机 CPU 周期的访问。大多数用户将使用和配置默认的 CFS 调度程序。在 Docker 1.13 及更高版本中,您还可以配置实时调度程序。
你需要
配置默认 CFS 调度程序
CFS 是用于普通 Linux 进程的 Linux 内核 CPU 调度程序。多个运行时标志允许您配置容器对 CPU 资源的访问量。当您使用这些设置时,Docker 会修改主机上容器的 cgroup 的设置。
您可以指定容器可以使用的可用 CPU 资源量,以及限制容器可以使用的特定 CPU 或核心,以及与 CPU 使用率配置相关的其他几个选项。有关更多信息,请查看来源。
警告:CPU 调度和优先级是内核级的高级功能。大多数用户不需要更改这些值的默认值。错误地设置这些值可能会导致主机系统变得不稳定或不可用。
我个人会谨慎地为每个容器分配 1/4 的 CPU 核心,为其他事情留出一些余地。因此在运行 docker v1.13 及更高版本的四核上:
IDdocker run -it --cpus="1" ubuntu /bin/bash
在 v.1.12 及更低版本中:
IDdocker run -it --cpu-period=100000 --cpu-quota=25000 ubuntu /bin/bash
对于四核系统来说,这似乎是一个很好的起点。我会调整这些参数以获得所需的性能和可用性水平。
来源: https://docs.docker.com/engine/admin/resource_constraints/#configure-the-default-cfs-scheduler