利用cgroup对docker进行全局资源限制(CPU, 内存, IO读写等限制)

我们购买的VPS一般资源属于共享的,商家往往会在TOS说明,禁止长期占用资源,超过百分之多少会进行停机处理等。而我们运行服务时,可以先自行对资源进行合理限制,防止程序异常占用资源导致被商家停机。


使用docker部署服务时,通常可以在docker run后面加上--cpus等参数对单个服务进行资源限制,而随着服务部署的越来越多,每个服务的限制往往略显麻烦。

这时候可以考虑使用全局资源限制,即针对所有docker服务,限制总体的资源占用。具体操作如下:

编写systemd配置:

cat << EOF > /etc/systemd/system/limit-docker.slice
[Unit]
Description=Slice with IOBandwidthLimit and CPUQuota for docker
Before=slices.target

[Slice]
CPUQuota=300%
MemoryMax=4G
IOReadBandwidthMax=/dev/vda3 1000M
IOWriteBandwidthMax=/dev/vda3 500M
EOF

值得注意的是,上面的配置需要根据实际情况修改(不可直接复制粘贴使用)
  • 配置中的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-reload
systemctl restart docker


评论

Popular Posts

《活法》作者:[日]稻盛和夫 pdf下载

MIFARE Classic Tool - 安卓NFC门禁卡修改工具

GooReader - 谷歌电子书PC端阅读器

麦当劳免费Wifi帐号密码及连接设置

使用AdGuard的公共dns屏蔽广告

Virtual Router - 让电脑成为WIFI热点共享上网的开源软件

搞懂并自主搭建ChatGPT的Reverse代理

月光宝盒 - 提供网站数据备份服务

说吧,你是想死呢还是不想活了?

VPS线路详解:包括163、CN2 GT、CN2 GIA、AS4837、AS9929、CMI/CMIN2线路