侧边栏壁纸
  • 累计撰写 8 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论
标签搜索

目 录CONTENT

文章目录

Linux系统使用cgroup限制用户进程过度使用内存

break
2023-07-07 / 0 评论 / 2 点赞 / 540 阅读 / 567 字 / 正在检测是否收录...

环境: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
2

评论区