一个Docker容器可以“nice”地运行吗?

12
我有一个Docker镜像,它托管了一个Web服务器和另一个运行后台任务的容器。大部分时间Web服务器处于空闲状态,后台任务应该允许使用100%的CPU,但是任何时候Web服务器需要资源,它都应该优先使用CPU,以便快速响应。
如果所有东西都在一台Linux机器上运行,我可以使用诸如nice -n19 background-task之类的方法来运行这些任务,并且它们将允许Web服务器使用所需的所有CPU。
是否有一种方法可以以nice级别运行整个容器?我知道可以使用cpu_quota限制每个后台任务可用的CPU时间,但这并不能解决问题。如果Web服务器希望使用所有4个CPU核心为客户端提供服务,则应允许这样做。如果Web服务器不忙,所有4个CPU核心都应该用于后台任务。
如果我更改Dockerfile中的命令为:
nice -n19 background-task

这会在容器之间起作用吗?容器内的进程都是在同一个内核上运行的普通进程,所以看起来似乎可以,但我不确定。

这似乎是一件相当明显的事情。我有什么遗漏吗?


你是指 --cap-add=sys_nice 吗?参考文档:https://docs.docker.com/config/containers/resource_constraints/。 - Alex Yu
@ingaz 不清楚添加该选项会做什么。我想要一个容器中的进程相对于另一个容器中的进程来说是不错的。我并不特别希望容器能够调整自己的内部 niceness 级别,事实上我更希望它不要这样做,而是可以从容器外部控制 niceness。 - rjmunro
docker 进程是普通的操作系统进程。因此,nice/renice 命令对其具有相同的作用。Docker 与否并不影响调度程序。也许我没有理解你的问题。 - Alex Yu
@ingaz 这正是我所期望的答案,但如果有一些实际的文档清楚地说明这一点就更好了。你能否将你的评论扩展成一个答案?我认为你不需要 --cap-add=sys_nice 来增加 niceness,只需要减少它。 - rjmunro
1个回答

9

Docker进程是通常的操作系统进程。

是否使用Docker并不影响进程调度程序。

因此,nice/renice命令对Docker进程与其他进程一样适用。


1
原帖作者:请把您的评论变成答案,这样我就可以接受它了。 评论者:将其转化为答案。 原帖作者:不接受它。 - absmiths

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接