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

标签: docker nice


【解决方案1】:

docker-processes 是常用的操作系统进程。

Docker 与否不是进程调度器关心的问题。

所以nice/renice 对 docker-processes 的工作方式与其他人相同。

【讨论】:

  • 原创海报:请将您的评论作为答案,以便我接受。评论者:把它变成一个答案。 OP:不接受。
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2020-06-25
相关资源
最近更新 更多