研究生工作过程中遇到有学生无视linux服务器实际的CPU核心数,开出几十上百个运算密集型进程,其他用户登陆困难或无响应等异常情况,需要对占用大头(CPU老虎?)的CPU资源做出限制。
使用cgroup可以实现用户组级别的限制,把老虎们扔进限制组就能解决问题,如果需要分别限制用户那就每个老虎一个组(前提是老虎属于少数,如果多数人都是老虎那就得考虑加CPU甚至加服务器了,组里穷,提买服务器基本属于说废话)。
注意linux中创建用户时默认会创建同名的组,所以按用户限制时不需要额外建组,直接限制用户的名字即可。
1.安装cgroup
服务器环境为centos7,使用yum安装cgroup:
yum install libcgroup-tools libcgroup-pam libcgroup
2.配置cgroup
设置cgroup服务开机启动:
systemctl enable cgconfig
systemctl enable cgred
编辑/etc/cgconfig.conf:
group cpu_limit1{
cpu{
# 限制CPU使用最大限度为12个核心,核心数自行修改
cpu.cfs_period_us=100000;
cpu.cfs_quota_us=1200000;
}
} # 限制器1
group cpu_limit2{
cpu{
# 限制CPU使用最大限度为12个核心,核心数自行修改
cpu.cfs_period_us=100000;
cpu.cfs_quota_us=1200000;
}
} # 限制器2
编辑/etc/cgrules.conf:
@user1 cpu cpu_limit1
@user2 cpu cpu_limit2
第一列为用户(组)名,第二列为限制类型,第三列为限制器名,即前述/etc/cgconfig.conf中的限制器
注:同一个限制器下建议只放置一个用户,如果放置多个用户(或者含多个用户的组)会导致组内争抢限制器的资源,组内一个人高占用会使得其他人卡住,违背了使用限制器的初衷“限制少数高占用用户,使得低占用用户体验流畅”。
重启服务:
systemctl restart cgconfig
systemctl restart cgred
完成
面对这种CPU老虎,服务器终于重新丝滑流畅了起来
捕获.JPG