主要介绍,如何对指定/所有用户进行资源限定(这里主要介绍cpu和内存占用限制),防止某些用户大量占用服务器计算资源,影响和挤占他人正常使用服务器。
cgroup管理工具sudo apt-get install cgroup-tools mount -t cgroup 命令检查验证
可以通过编写 /etc/cgconfig.conf和 /etc/cgrules.conf 文件进行计算资源的配置,其中:
/etc/cgconfig.conf 实现具体的配置设置/etc/cgrules.conf 确定每个用户属于哪个配置cgroup工具,会根据上面的两个文件中的不同资源限制,自动生成一些具体的配置文件,放在/sys/fs/cgroup/下的对应文件夹下,有点类似CMakeLists.txt。
group限制单用户/多用户计算资源使用 group字段,创建资源限制组,进行组内成员的资源控制限制
在 /etc/cgconfig.conf添加如下配置,将会对组users_mem_limit 内的用户所能申请的最大内存进行限制。
# `group`是特殊字段,`users_mem_limit`是组的名称 group users_mem_limit{ memory{ memory.limit_in_bytes = 15G; memory.memsw.limit_in_bytes = 16G; } } 其中:
memory.limit_in_bytes 只限制实际的物理内存使用,不包括交换空间
memory.memsw.limit_in_bytes 限制实际物理内存和交换空间的总使用
一般来说,两个参数需要使用字节(bytes)为单位,但是也可以直接使用这里的G
在 /etc/cgrules.conf添加如下配置,实现将某个/某些用户添加到该组。
#用户名 #限制类型 #所属组 user01 memory users_mem_limit/ user02 memory users_mem_limit/ 设置限制服务开机启动
#开机启动 systemctl enable cgconfig systemctl enable cgred #重启服务 systemctl restart cgconfig systemctl restart cgred 注意点:
这种情况下,该组内的用户将会共用受限的15G内存,而不是每个人最大15G,例如上面的例子中,user01和user02将共用15G内存;
如果程序申请不到内存,自己会停下来并报错。如果仅限制物理内存的容量,不限制swap的容量,那么进程不会被杀死。可以保持运行。
template限制多个用户的内存和CPU占用刚才使用group 也可以实现多用户的限制,但是被限制的用户将会共用受限资源,如何实现对每个用户的计算资源进行同等配置,同时限制所有用户对共用服务器CPU和内存资源的过度使用? 这里使用template 实现。
template 本质上只是一个模板,本质上是会对所有用户都单独生成一个组?。
在 /etc/cgconfig.conf添加如下配置,使用template,设置了memory 不能超过60GB,最多100%占用36个CPU核心。
template users/%u { memory { memory.limit_in_bytes = 60G; memory.memsw.limit_in_bytes = 61G; } cpu { cpu.cfs_quota_us = 3600000; cpu.cfs_period_us = 100000; } } 其中cpu的限制逻辑是:
在 cpu.cfs_period_us 周期内,只能使用最多cpu.cfs_quota_us 的cpu资源。
默认情况下,cpu.cfs_period_us的单位为微秒,默认值为100000。cpu.cfs_quota_us的值为-1,即不做限制。
例子中,利用两个参数的比值cpu.cfs_quota_us/cpu.cfs_period_us=3600% ,实现最多100%占用36个CPU核心。
在 /etc/cgrules.conf添加如下配置,对所有用户的cpu和内存进行控制。
#所有用户 限制类型 模板 * cpu,memory users/%u 设置服务
#开机启动 systemctl enable cgconfig systemctl enable cgred #重启服务 systemctl restart cgconfig systemctl restart cgred 在/sys/fs/cgroup下,有不同的文件夹,这些文件分别包含了不同的资源配置文件。
cgroup根据 /etc/cgconfig.conf配置文件,自动生成一些具体的文件,然后在在/sys/fs/cgroup的不同文件夹下生成对应的配置,例如:
刚才使用的group配置中生成的cgroup文件在/sys/fs/cgroup/memory/users_mem_limit目录下。
刚才使用的template 将会自动生成以下数据
/sys/fs/cgroup/memory/users/user01 /sys/fs/cgroup/memory/users/user02/sys/fs/cgroup/cpu/users/user01/sys/fs/cgroup/cpu/users/user02可以使用如下指令删除某个用户的配置,当他重新登录时,就会自动取消
cgdelete cpu:/users/user01 cgdelete memory:/users/user01
上一篇:Ubuntu内核升级