【发布时间】:2019-06-09 17:27:48
【问题描述】:
我有一个托管 Web 服务器的 docker 映像和另一个运行后台任务的映像。大部分时间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_nicedocs.docker.com/config/containers/resource_constraints 吗? -
@ingaz 不清楚添加该选项的作用。我希望一个容器中的进程相对于另一个容器中的进程更好。我并不特别希望容器能够调整它自己的内部友好度,事实上我宁愿它没有,我可以从容器外部控制友好度。
-
docker-processes 是常用的操作系统进程。所以nice/renice必须以同样的方式为他们工作。 Docker 与否不是调度程序关心的问题。也许我不明白你的问题 -
@ingaz 这就是我所希望的答案,但如果有一些实际的文档在某处清楚地说明这一点会很好。您能否将您的评论扩展为答案?我不认为你需要
--cap-add=sys_nice来增加友好度,只是为了减少它。