systemd与cgroup
简介
这里介绍systemd中与control group相关的配置。
k8s一般会建议containerd或者docker配置使用systemd来管理cgroup。
配置
cpu相关
CPUAccounting:4.15以上的内核默认值为yes,表示启动cpu计数
CPUWeight:1-10000,默认100,基于权重分配cpu时间,如果是idle,则只有cpu空闲的时候才能获取cpu
StartupCPUWeight:进程启动或者停止时的权重。
CPUQuota: 控制cpu.max(cgoup v2)或者cpu.cfs_quota_us(cgroup v1),控制进程可以获得的最大cpu时间,100%表示能获取1个cpu所有的时间。
CPUQuotaPeriodSec:CPUQuota的计算周期
AllowedCPUs:限制进程在指定的进程执行
内存相关
MemoryAccounting
MemoryMin,MemoryLow,StartupMemoryLow
MemoryHigh,StartupMemoryHigh
MemoryMax,StartupMemoryMax
MemorySwapMax,StartupMemorySwapMax
MemoryZSwapMax,StartupMemoryZSwapMax
AllowedMemoryNodes,StartupMemoryNodes
进程相关
TasksAccounting:启动进程计数
TasksMax=N:限制最多启动的进程数
网络,IO,设备,BPF相关见man手册,这里省略。
测试
#写一个无限循环的脚本
[root@testdsq system]# cat /root/code/container/systemd/test.sh
i=0
while [ 1 ]
do
let i=i+1
done
#创建成service
[root@testdsq system]# cat test.service
[Unit]
Description=test cgroup
[Service]
Type=simple
ExecStart=/bin/bash /root/code/container/systemd/test.sh
KillMode=process
[Install]
WantedBy=multi-user.target
#加载test.service
[root@testdsq system]# systemctl daemon-reload
#启动test.service
[root@testdsq system]# systemctl start test.service
#top查看进程使用了100% cpu
#设置test.service最多使用50% cpu
[root@testdsq system]# systemctl set-property test.service CPUQuota=50%
#top查看进程使用了50% cpu
#set-property会生成50-CPUQuota.conf,所以重启service上面的配置还是生效的
[root@testdsq usr]# cat /etc/systemd/system.control/test.service.d/50-CPUQuota.conf
# This is a drop-in unit file extension, created via "systemctl set-property"
# or an equivalent operation. Do not edit.
[Service]
CPUQuota=50%
#查看systemd cgroup的树形结构,默认service放在systemd.service下面
[root@testdsq usr]# systemd-cgls
#查看systemd cgroup资源使用情况
[root@testdsq usr]# systemd-cgtop
参考
- man systemd.resource-control
- man systemd.service

浙公网安备 33010602011771号