当前位置: 首页 > news >正文

使用cgroup工具对服务器某些/全部用户进行计算资源限制

使用cgroup工具对服务器某些/全部用户进行计算资源限制

主要介绍,如何对指定/所有用户进行资源限定(这里主要介绍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字段,创建资源限制组,进行组内成员的资源控制限制

  1. /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

  2. /etc/cgrules.conf添加如下配置,实现将某个/某些用户添加到该组。

    #用户名			   #限制类型        #所属组
    user01               memory          users_mem_limit/
    user02               memory          users_mem_limit/
    
  3. 设置限制服务开机启动

    #开机启动
    systemctl enable cgconfig
    systemctl enable cgred
    #重启服务
    systemctl restart cgconfig
    systemctl restart cgred
    

注意点:

  • 这种情况下,该组内的用户将会共用受限的15G内存,而不是每个人最大15G,例如上面的例子中,user01user02将共用15G内存;

  • 如果程序申请不到内存,自己会停下来并报错。如果仅限制物理内存的容量,不限制swap的容量,那么进程不会被杀死。可以保持运行。

使用template限制多个用户的内存和CPU占用

刚才使用group 也可以实现多用户的限制,但是被限制的用户将会共用受限资源,如何实现对每个用户的计算资源进行同等配置,同时限制所有用户对共用服务器CPU和内存资源的过度使用? 这里使用template 实现。

template 本质上只是一个模板,本质上是会对所有用户都单独生成一个组?。

  1. /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的单位为微秒,默认值为100000cpu.cfs_quota_us的值为-1,即不做限制。

    • 例子中,利用两个参数的比值cpu.cfs_quota_us/cpu.cfs_period_us=3600% ,实现最多100%占用36个CPU核心。

  2. /etc/cgrules.conf添加如下配置,对所有用户的cpu和内存进行控制。

    #所有用户		 限制类型	           模板
    *               cpu,memory          users/%u
    
  3. 设置服务

    #开机启动
    systemctl enable cgconfig
    systemctl enable cgred
    #重启服务
    systemctl restart cgconfig
    systemctl restart cgred
    

一些注意点

/sys/fs/cgroup下,有不同的文件夹,这些文件分别包含了不同的资源配置文件。

cgroup根据 /etc/cgconfig.conf配置文件,自动生成一些具体的文件,然后在在/sys/fs/cgroup的不同文件夹下生成对应的配置,例如:

  1. 刚才使用的group配置中生成的cgroup文件在/sys/fs/cgroup/memory/users_mem_limit目录下。

  2. 刚才使用的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
  3. 可以使用如下指令删除某个用户的配置,当他重新登录时,就会自动取消

    cgdelete cpu:/users/user01
    cgdelete memory:/users/user01
    

参考

  1. 使用 nice、cpulimit 和 cgroups 限制 cpu 占用率
  2. 如何对占据服务器大量cpu资源的用户进行限制
  3. Linux系统使用cgroup限制用户进程过度使用内存
  4. 精准限制CPU:Cgroups
http://www.lryc.cn/news/145926.html

相关文章:

  • C#获取DataTable的前N行数据然后按指定字段排序
  • Swift 中的动态成员查找
  • leetcode做题笔记102. 二叉树的层序遍历
  • python编写四画面同时播放swap视频
  • 用XSIBackup为VMware ESXi打造完美备份方案
  • React 项目中引入msal验证以及部分报错处理
  • Unity3D 2021 使用 SharpZipLib 遇到的安卓打包 I18N 相关问题
  • 软件工程(十五) 行为型设计模式(一)
  • 【校招VIP】前端算法考点之快慢指针题型
  • Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)
  • 部署问题集合(二十一)从零开始搭建一台NAS服务器(Linux虚拟机)
  • Git小白入门——了解分布式版本管理和安装
  • 芯科科技宣布推出下一代暨第三代无线开发平台,打造更智能、更高效的物联网
  • 无涯教程-Android - Intents/Filters
  • NFTScan 正式上线 Base NFTScan 浏览器和 NFT API 数据服务
  • 【Git】测试持续集成——Git+Gitee+PyCharm
  • 《HelloGitHub》第 89 期
  • 多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比
  • c语言每日一练(12)
  • 用AI + Milvus Cloud搭建着装搭配推荐系统
  • 41、springboot 整合 FreeMarker 模版技术
  • 每天 26,315 美元罚款?交通安全局要求特斯拉提供 Autopilot数据
  • 3d激光slam建图与定位(2)_aloam代码阅读
  • Java 8 新特性——Lambda 表达式(2)
  • MES管理系统中常用的数据模型有哪些
  • ARM DIY(三)板载串口和 LCD 调试
  • 计算机网络-笔记-第一章-计算机网络概述
  • Oracle-day4:分组查询(带条件)、DDL建表、约束、主从表
  • (详解)数据结构-----------栈与队列 c语言实现
  • 前端文件、图片直传OOS、分片上传、el-upload上传(vue+elementUI)