systemd cgroup限制资源使用

如果你的程序需要使用cgroup,那么用systemd实现的cgroup功能会更方便。

之前用cgroup时遇到一个问题,在ubuntu18上写入cgroup的pid过一会就会消失,但是pid所属进程并没有挂掉,代码如下:

echo '{{ cpu_total }}' > /sys/fs/cgroup/cpu/{{ cpu_cgroup_name }}/cpu.cfs_period_us
echo '{{ cpu_limit }}' > /sys/fs/cgroup/cpu/{{ cpu_cgroup_name }}/cpu.cfs_quota_us
echo {{pid}} >> /sys/fs/cgroup/cpu/{{ cpu_cgroup_name }}/cgroup.procs

然后在cgroup目录下

grep {{ pid }} -r .

发现,我的pid竟然在system.slice下面

cgroup有一个特性,把pid写入新的cgroup,其他cgroup中的同一控制组(如cpu,memory)中的该pid就会被移除掉。

所以我的cgroup中的pid是被systemd给顶掉了,发现是某个版本以上的systemd中,默认会把systemd service的pid加入到system.slice中。

找了一下看到了专门描述systemd这一功能的文章:

第 1 章 控制群组简介 Red Hat Enterprise Linux 7 | Red Hat Customer Portal​​​​​​

 然后发现,我之前的代码,放到.service文件里面,只需要加一行

CPUQuota={{ processer_vcpus * 100 * 0.9 }} 

就完成了,简单又安全。

[Unit]
Description=ClickHouse Server (analytic DBMS for big data)
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
CPUQuota={{ processer_vcpus * 100 * 0.9 }} 
Restart=always
RestartSec=30
RuntimeDirectory=clickhouse-server
ExecStart=/usr/bin/clickhouse-server --config=/datadisk/conf/clickhouse-server/config.xml --pid-file=/datadisk/clickhouse/clickhouse-server.pid
LimitCORE=infinity
LimitNOFILE=2000000
User=root
[Install]
WantedBy=multi-user.target

参考:

第 1 章 控制群组简介 Red Hat Enterprise Linux 7 | Red Hat Customer Portal

systemd.resource-control

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值