使用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字段,创建资源限制组,进行组内成员的资源控制限制
-
在
/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
参考
- 使用 nice、cpulimit 和 cgroups 限制 cpu 占用率
- 如何对占据服务器大量cpu资源的用户进行限制
- Linux系统使用cgroup限制用户进程过度使用内存
- 精准限制CPU:Cgroups
相关文章:
使用cgroup工具对服务器某些/全部用户进行计算资源限制
使用cgroup工具对服务器某些/全部用户进行计算资源限制 主要介绍,如何对指定/所有用户进行资源限定(这里主要介绍cpu和内存占用限制),防止某些用户大量占用服务器计算资源,影响和挤占他人正常使用服务器。 安装cgrou…...
C#获取DataTable的前N行数据然后按指定字段排序
获取DataTable的前N行数据然后按指定字段排序 可以使用以下三种代码: 第一种:使用Linq DataTable dtLast dataTable.AsEnumerable().Take(count).OrderBy(dataRow > Convert.ToInt32(dataRow["Sequence"])).CopyToDataTable(); 第二种…...
Swift 中的动态成员查找
文章目录 前言基础介绍基础示例1. 定义一个动态成员访问类:2. 访问嵌套动态成员: 使用 KeyPath 的编译时安全性KeyPath 用法示例KeyPath 进阶使用示例1. 动态访问属性:2. 结合可选属性和 KeyPath:3. 动态 KeyPath 和字典ÿ…...
leetcode做题笔记102. 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 思路一:递归 int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){int** ans(int**)mal…...
python编写四画面同时播放swap视频
当代技术让我们能够创建各种有趣和实用的应用程序。在本篇博客中,我们将探索一个基于wxPython和OpenCV的四路视频播放器应用程序。这个应用程序可以同时播放四个视频文件,并将它们显示在一个GUI界面中。 C:\pythoncode\new\smetimeplaymp4.py 准备工作…...
用XSIBackup为VMware ESXi打造完美备份方案
文章目录 VMware ESXi 备份方案引言XSIBackup安装步骤1. XSIBackup软件安装2. SSH连接3. 定位到xsibackup目录4. 修改文件权限5. 安装cron查看crontab列表6. 配置备份任务结论VMware ESXi 备份方案 引言 数据就像是我们的生命线,一旦丢失,可能会带来无法挽回的损失。对于那…...
React 项目中引入msal验证以及部分报错处理
功能实现 如何在React 项目中引入msal身份验证, 微软在官网有提供文档支持,文档包含示例和具体使用的教程,地址如下: https://learn.microsoft.com/zh-cn/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal 照着文…...
Unity3D 2021 使用 SharpZipLib 遇到的安卓打包 I18N 相关问题
在 Unity3D 中,使用 ICSharpCode.SharpZipLib.dll 来做压缩和解压缩,但打包安卓后遇到问题,原因是字符编码程序集被裁减掉了导致。 根据网上搜索,将 UnityEditor 对应目录下的 I18N开头的,比如 I18N.CJK.dll 等系列文…...
软件工程(十五) 行为型设计模式(一)
1、责任链模式 简要说明 通过多个对象处理的请求,减少请求的发送者与接收者之间的耦合。将接受对象链接起来,在链中传递请求,直到有一个对象处理这个请求。 速记关键字 传递职责 类图如下 由类图可以比较容易的看出来,其实就是自己关联自己,形成了一个链,并且自己有…...
【校招VIP】前端算法考点之快慢指针题型
考点介绍: 链表是校招面试里手撕代码出现频度比较高的题型,三线和中小厂会考察简单的链表反转,大厂会进一步考察复杂度和双指针问题,比如中间元素、是否存在环等。 『前端算法考点之快慢指针题型』相关题目及解析内容可点击文章末…...
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)
Docker基础入门:容器数据卷与Dockerfile构建镜像(发布) 一、docker容器数据卷1.1、使用docker容器数据卷1.2、具名挂载、匿名挂载1.3、如何确定是具名挂载还是匿名挂载 二、使用dockerfile2.1 初识Dockerfile2.2 Dockerfile构建过程2.3 Docke…...
部署问题集合(二十一)从零开始搭建一台NAS服务器(Linux虚拟机)
前言 因工作需要,需要从零通过虚拟机搭建一台NAS服务器,以此记录下来 步骤 1、创建虚拟机 通过VMWare创建一台新虚拟机,虚拟机内存和磁盘自定义,不过建议尽量大一点 2、服务器端配置 查看是否安装有NFS服务:rpm …...
Git小白入门——了解分布式版本管理和安装
Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一) 什么是版本控制系统? 程序员开发过程中,对于每次开发对各种文件的修改、增加、删除,达到预期阶段的一个快照就叫做一个版本。 如果有一…...
芯科科技宣布推出下一代暨第三代无线开发平台,打造更智能、更高效的物联网
第三代平台中的人工智能/机器学习引擎可将性能提升100倍以上 Simplicity Studio 6软件开发工具包通过新的开发环境将开发人员带向第三代平台 中国,北京 - 2023年8月22日 – 致力于以安全、智能无线连接技术,建立更互联世界的全球领导厂商Silicon Labs&…...
无涯教程-Android - Intents/Filters
Android Intent 是要执行的操作的抽象描述。它可以与 startActivity 一起启动Activity,将 broadcastIntent 发送给任何BroadcastReceiver组件,并与 startService(Intent)或 bindService(Intent,ServiceConnection,int)与后台服务进…...
NFTScan 正式上线 Base NFTScan 浏览器和 NFT API 数据服务
2023 年 8 月 24 号,NFTScan 团队正式对外发布了 Base NFTScan 基础设施,将为 Base 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,Base 是继 Bitcoin、Ethereum、BNBChain、…...
【Git】测试持续集成——Git+Gitee+PyCharm
文章目录 概述一、使用Gitee1. 注册账号2. 绑定邮箱3. 新建仓库4. 查看项目地址 二、安装配置Git1. 下载安装包2. 校验是否安装成功。3. 配置Git4. Git命令5. Git实操 三、PyCharmGit1. 配置Git2. Clone项目3. 提交文件到服务器4. 从服务器拉取文件 概述 持续集成(…...
《HelloGitHub》第 89 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 …...
多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比
多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比 目录 多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比 模型…...
c语言每日一练(12)
前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
