
使用docker部署服务时,通常可以在docker run后面加上--cpus等参数对单个服务进行资源限制,而随着服务部署的越来越多,每个服务的限制往往略显麻烦。
这时候可以考虑使用全局资源限制,即针对所有docker服务,限制总体的资源占用。具体操作如下:
编写systemd配置:
cat << EOF > /etc/systemd/system/limit-docker.slice[Unit]Description=Slice with IOBandwidthLimit and CPUQuota for dockerBefore=slices.target[Slice]CPUQuota=300%MemoryMax=4GIOReadBandwidthMax=/dev/vda3 1000MIOWriteBandwidthMax=/dev/vda3 500MEOF
值得注意的是,上面的配置需要根据实际情况修改(不可直接复制粘贴使用)
- 配置中的CPUQUota=300%,表示使用3个核心的CPU。
- MemoryMax=4G,表示最大限制使用4G内存,超出会中止服务。
- IOReadBandwidthMax和IOWriteBandwidthMax分别表示限制磁盘读和写的速度为1G/s和500M/s,针对的磁盘设置为/dev/vda3
编辑docker配置文件 /etc/docker/daemon.json ,加入上面的配置:
{"cgroup-parent": "limit-docker.slice"}
使配置生效:
systemctl daemon-reloadsystemctl restart docker