繁体   English   中英

如何设置Docker容器的CPU优先级(niceness)?

[英]How to set the CPU priority (niceness) of a Docker container?

我的一个容器总是很忙,并且正在将CPU从需要响应且仅不时处于活动状态的其他容器(网络服务器)中夺走。

我想降低占用CPU的容器的CPU优先级,以便每当其他容器需要CPU时,它都不会被阻塞。

我该怎么做呢? 我已经在网上搜索了一段时间,但找不到答案。

我试过使用--entrypoint='nice 10 mybinary'运行容器,但事实证明--entrypoint仅能运行二进制文件,而不能运行shell命令。

您可以在容器级别限制CPU资源。 我建议为您的情况使用--cpu-shares 512

https://docs.docker.com/config/containers/resource_constraints/

将此标志设置为大于或小于默认值1024的值,以增加或减少容器的重量,并使其可以访问更多或更少比例的主机CPU周期。 仅在限制CPU周期时才执行此操作。 当有足够的CPU周期可用时,所有容器都会根据需要使用尽可能多的CPU。 这样,这是一个软限制。 --cpu-shares不会阻止以群集模式调度容器。 它将容器CPU资源的优先级分配给可用的CPU周期。 它不保证或保留任何特定的CPU访问权限。

--cpu-shares看起来是一个不错的答案,尽管我不清楚如何验证它是否正常工作。 我也很好奇最大值是多少? 文件没有说。

但是,作为可信任容器的替代方法,该文档还显示--cap-add=sys_nice ,它将允许更改容器内的进程优先级。 即,如果容器中有nicerenice命令,则在添加sys_nice功能时它应该可以工作。 您只想允许此功能用于受信任的容器,因为您不希望不受信任的程序故意改变其优先级。

您可以通过在主机上使用topps -efl检查NI进程中的有关进程来进行验证。

设置CPU份额是您请求的最直接答案,并且通常比容器中添加功能更受容器内部的恶意行为者影响主机。 我可以想到的向容器添加SYS_NICE功能的唯一原因是,如果容器内有多个进程,并且希望为其赋予不同的优先级,或者需要在容器运行时更​​改优先级。

对于嘈杂的邻居,更传统的解决方案是为每个容器配置一个允许使用多少CPU和内存的限制。 这是一个上限,因此请注意,如果将此值设置得较低,并且没有其他可用于运行CPU的任务,则可能会有空闲的CPU资源。

通过--cpus docker run命令行在容器上设置限制的最简单方法是使用--cpus ,它使您可以配置可用于容器的少量内核。 传递--cpus 2.5类的选项可使容器在内核调度程序限制进程之前使用多达2.5个内核。 如果您有4核主机,那将确保其他进程始终至少有1.5核可用。

与这些限制相关,在群集模式下,您还可以配置CPU(和内存)的预留空间。 保留是Docker确保尚未为任何其他容器保留的下限。 这用于选择要调度容器的节点,并且可能在没有足够的可用资源时阻止某些容器的调度,而不是在单个节点上调度如此多的作业而导致其失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM