Linux
為什麼我的資源限制沒有得到尊重?
我想限制我係統上 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 日誌中看到了幾個關於 cgroups 的警告
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
為什麼我的資源限制被忽略了?解決此問題的方法有哪些?
對於任何也在為此苦苦掙扎的人,而不是
systemctl daemon-reload systemctl restart docker
做這個
systemctl daemon-reload systemctl start limit-docker.slice systemctl restart docker