为什么我的资源限制不受尊重?

为什么我的资源限制不受尊重?

我想限制系统上 docker 容器可用的 cpu 资源。我不想限制单个容器的资源消耗,而只想限制所有容器的资源消耗。

首先我创建了一个切片:

# /etc/systemd/system/limit-docker.slice
[Unit]
Description=Slice that limits docker resources
Before=slices.target

[Slice]
CPUAccounting=true
CPUQuota=300%

然后我配置了切片/etc/docker/daemon.json

{
   "cgroup-parent": "/limit-docker.slice"
}

然后我重新加载systemctl并重新启动docker

systemctl daemon-reload
systemctl restart docker

然后我启动了一个容器,并使用 systemd-cgls 确认该容器是对照组的一部分

-.slice
├─limit-docker.slice
│ └─49d07f9319edfd727d4e6211d5d41c15daf49bc57174100d1ab80e2352170d7e
│   └─13685 python app.py execute 

但是我指定的资源限制没有得到遵守

Control Group                                                       Tasks   %CPU   Memory   
/limit-docker.slice                                                    34  388.3     3.5G         
/limit-docker.slice/4…211d5d41c15daf49bc57174100d1ab80e2352170d7e      34  388.3     3.3G 

我在 systemd 日志中看到一些有关 cgroup 的警告

level=warning msg="Your kernel does not support swap memory limit"
level=warning msg="Your kernel does not support cgroup rt period"
level=warning msg="Your kernel does not support cgroup rt runtime"

我的理解是,这些 cgroup 与我想要实现的目标无关,并且它们不受支持也没关系。它是否正确?

Operating System: Debian GNU/Linux 9 (stretch)
Kernel: Linux 4.4.182-xenomai-2 
systemd: 232
Docker: 18.06.1-ce

为什么我的资源限制被忽略?我有哪些选项可以解决此问题?

答案1

对于任何也为此苦苦挣扎的人来说,而不是

systemctl daemon-reload
systemctl restart docker

做这个

systemctl daemon-reload
systemctl start limit-docker.slice
systemctl restart docker

相关内容