环境:Centos 7.9
软件:libcgroup Tools
使用libcgroup Tools,仅需要修改cgconfig.conf和cgrules.conf两个文件,使用相对简单。
记录下来备用。
1、确认已经安装了libcgroup Tools
yum install libcgroup
yum install libcgroup-tools
2、在 /etc/cgconfig.conf添加如下配置
group users_mem_limit{
memory{
memory.limit_in_bytes = 15G;
memory.memsw.limit_in_bytes = 16G;
}
}
3、在 /etc/cgrules.conf添加如下配置
user01 memory users_mem_limit/
这样用户user01,在系统下的所有进程使用的内存不得超过16G,否则应用就会被杀掉。
4、重启服务
systemctl enable cgconfig
systemctl restart cgconfig
systemctl enable cgred
systemctl start cgred
5、stress测试内存限制是否生效,启动4个进程,每个进程分配5G内存,峰值会使用20GB内存。
stress -m 4 --vm-bytes 5G
stress: info: [103434] dispatching hogs: 0 cpu, 0 io, 4 vm, 0 hdd
stress: FAIL: [103434] (415) <-- worker 103438 got signal 9
stress: WARN: [103434] (417) now reaping child worker processes
stress: FAIL: [103434] (451) failed run completed in 13s
6、进阶,对所有用户限制内存和CPU占用
限制用户对共用服务器CPU和内存资源的过度使用。
在 /etc/cgconfig.conf添加如下配置,使用template,设置了memory 不能超过18GB,最多100%占用4个CPU核心。
template users/%u {
memory {
memory.limit_in_bytes = 16G;
memory.memsw.limit_in_bytes = 18G;
}
cpu {
cpu.cfs_quota_us = 400000;
cpu.cfs_period_us = 100000;
}
}
在 /etc/cgrules.conf添加如下配置,对所有用户的cpu和内存进行控制。
* cpu,memory users/%u
7、参数不生效的原因
1、修改上述配置文件后,按顺序重启cgconfig 和cgred。
2、测试账号user01,需要退出系统中所有的进程,重新登录。
3、检查默认路径下的cgroup文件(CentOS 7.4 的cgroup默认控制器路径为/sys/fs/cgroup)。
4、普通配置中生成的cgroup文件在/sys/fs/cgroup/memory/users_mem_limit目录下。
5、进阶配置中自动生成的cgroup文件在 /sys/fs/cgroup/memory/users/user01和 /sys/fs/cgroup/cpu/users/user01目录下。
6、删除原有的配置文件,user01重新登陆系统,cgroup配置文件会重新生成。
cgdelete cpu:/users/user01
cgdelete cpu:/users/user01
评论区