使用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.mzph.cn/news/54103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【目标检测】理论篇(2)YOLOv3网络构架及其代码实现

网络构架图: 代码实现: import math from collections import OrderedDictimport torch.nn as nn#---------------------------------------------------------------------# # 残差结构 # 利用一个1x1卷积下降通道数,然后利用一个3x3卷…

设计模式概述

文章目录 设计模式概述创建型模式:结构型模式:行为型模式: 设计模式概述 设计模式是什么? 设计模式的一般定义为: 设计模式(Design Pattern)是一套反复使用、多人知晓的,经过分类…

机器学习在大数据分析中的应用

文章目录 机器学习在大数据分析中的原理机器学习在大数据分析中的应用示例预测销售趋势客户细分和个性化营销 机器学习在大数据分析中的前景和挑战前景挑战 总结 🎉欢迎来到AIGC人工智能专栏~探索机器学习在大数据分析中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

Kubernetes(K8S)简介

Kubernetes (K8S) 是什么 它是一个为 容器化 应用提供集群部署和管理的开源工具,由 Google 开发。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项…

【Unity小技巧】unity2d平台制作一根三七调的鱼竿效果(附git源码)

文章目录 前言素材开始源码参考完结 前言 今天我们做一个2d鱼竿的效果,先看一下效果成品效果 素材 鱼竿 开始 首先创建一个2D URP项目 ,创建一个空物体作为鱼竿,并创建两个子物体作为开始和结束点 配置层级如下 鱼竿和鱼线加Line Ren…

为什么网络互联地址设置为30位地址

对于点对点链路,为了节约IPv4地址,一般为其分配/30地址块,这样包含4个地址:最小地址作为网络地址,最大地址作为广播地址,剩余两个可分配地址,分配给链路两端的接口,这是最普遍的方法…

大语言模型之六- LLM之企业私有化部署

数据安全是每个公司不得不慎重对待的,为了提高生产力,降本增效又不得不接受新技术带来的工具,私有化部署对于公司还是非常有吸引力的。大语言模型这一工具结合公司的数据可以大大提高公司生产率。 私有化LLM需要处理的问题 企业内私有化LLM…

【Axure原型分享】能统计中英文字数的多行输入框

今天和大家分享能统计中英文字数的多行输入框的原型模板,在输入框里输入内容后,能够动态根据输入框的内容,统计出字符数量,包括总字数、中文字数、英文字数、数字字数、其他标点符号的字数,具体效果可以观看下方视频或…

系统架构设计高级技能 · 安全架构设计理论与实践

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

【C++】AVL树(高度平衡二叉树)

AVL树 概念AVL树节点定义AVL树节点插入AVL树四种旋转情况左单旋右单旋先左单旋再右单旋先右单旋后左单旋 元素的插入及控制平衡判断最后节点是否平衡 概念 二叉搜索树虽然可以缩短查找的效率,但如果数据有序或者接近有序二叉搜索树将退化为单支树,查找元…

copy is all you need前向绘图 和疑惑标记

疑惑的起因 简化前向图 GPT4解释 这段代码实现了一个神经网络模型,包含了BERT、GPT-2和MLP等模块。主要功能是给定一个文本序列和一个查询序列,预测查询序列中的起始和结束位置,使其对应文本序列中的一个短语。具体实现细节如下&#xff1a…

Win系统设置开机自启项及自定义自启程序

Win系统设置开机自启项及自定义自启程序 分用户自启动和系统自启动两种形式: 1. 用户自启动目录:C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 用快速键打开: Win键R键,输入shell:…

sql server 快速安装

目录标题 一、下载二、直接选择基本安装二、下载ssms(数据库图形化操作页面)三、开启sa账号认证(一)第一步:更改身份验证模式(二)第二步:启用 sa 登录四、开启tcp/ip 一、下载 下载…

低通滤波器和高通滤波器

应用于图像低通滤波器和高通滤波器的实现 需要用到傅里叶变换 #include <opencv2/opencv.hpp> #include <Eigen> #include <iostream> #include <vector> #include <cmath> #include <complex>#define M_PI 3.14159265358979323846…

QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

本示例使用的环境如下&#xff1a; 硬件平台&#xff1a;x86_64&#xff08;amd64&#xff09;操作系统&#xff1a;CentOS 7.8 2003数据库版本&#xff08;含CSDK&#xff09;&#xff1a;GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10&#xff1f;该版本包含QODBC。 1&#…

ES6中promise的使用

ES6中promise的使用 本文目录 ES6中promise的使用基础介绍箭头函数function函数状态 原型方法Promise.prototype.then()Promise.prototype.catch() 静态方法Promise.all()Promise.race()Promise.any() 链式回调 基础介绍 官网&#xff1a;https://promisesaplus.com/ window.…

最新docker多系统安装技术

在Ubuntu操作系统中安装Docker 在Ubuntu操作系统中安装Docker的步骤如下。 1&#xff0e;卸载旧版本Docker 卸载旧版本Docker的命令如下&#xff1a; $ sudo apt-get remove docker docker-engine docker.io 2&#xff0e;使用脚本自动安装 在测试或开发环境中&#xff0…

STM32 进不了main 函数

1. 我用的是STM32L151C8T6 的芯片&#xff0c;在github 上找了个别人的例程&#xff0c;拿来当模板改&#xff0c;由于他用的是HSE 外部晶振&#xff0c;我用的是内部晶振HSI&#xff0c;所以需要改系统时钟&#xff0c;改完后debug&#xff0c; 一直进不了main 函数&#xff0…

PHP“牵手”拼多多商品详情数据获取方法,拼多多API接口批量获取拼多多商品详情数据说明

拼多多商品详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取拼多多商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在拼多多电商平台的开发中&#xff0c;拼多多详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍拼多多…

【C++】C++ 引用详解 ⑤ ( 函数 “ 引用类型返回值 “ 当左值被赋值 )

文章目录 一、函数返回值不能是 " 局部变量 " 的引用或指针1、函数返回值常用用法2、分析函数 " 普通返回值 " 做左值的情况3、分析函数 " 引用返回值 " 做左值的情况 函数返回值 能作为 左值 , 是很重要的概念 , 这是实现 " 链式编程 &quo…