Centos7 - 使用cgroups限制进程资源

cgroups简介

控制组(cgroups)是一个linux内核特性,它允许你指定内核应该如何给一个进程组分配特定的资源。你可以用cgroups指定在某一个组中的进程使用多少cpu时间、系统内存、网络带宽、或者这些资源的组合。

(选自马哥教育的微信公众平台)

cgroups使用

# 下载一个可以模拟cpu高负载的工具,mathomatic是质数生成器,会加大处理器的负荷
 wget http://mathomatic.orgserve.de/mathomatic-16.0.5.tar.bz2 

tar xf mathomatic-16.0.5.tar.bz2
cd mathomatic-16.0.5/primes/
make && make install        #  编译安装

# centos7系统需要安装libcgroup-tools包,才有cgroup配置命令
yum install -y libcgroup-tools.x86_64

# 创建两个不同cpu资源分配的组
cgcreate -g cpu:/large      # 具体命令使用cgcreate -h
cgcreate -g cpu:/small

# cpu.shares是cpu控制的一个属性,更多的属性
# 可以到/sys/fs/cgroup/cpu目录下查看,默认值是1024,值越大,能获得更多的cpu时间
cgset -r cpu.shares=512 small 

# cgexec启动一个cgroup任务
matho-primes 0 999999999 > /dev/null &  # 生成一个从0到999999999的质数列表
cgexec -g cpu:small /usr/local/bin/matho-primes 0 999999999 > /dev/null & # 后台运行

# 使用top命令查看发现cpu被100%占用,因为是一个单独的进程,它使用尽可能多的cpu
# cgroups限制仅在两个或多个以上进程竞争cpu资源时起作用
 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
 6726 root      20   0    9208   2540    488 R  99.9  0.0   0:34.47 matho-primes

cgexec -g cpu:large /usr/local/bin/matho-primes 0 9999999999 > /dev/null
cgexec -g cpu:small /usr/local/bin/matho-primes 0 9999999999 > /dev/null
cgexec -g cpu:small /usr/local/bin/matho-primes 0 9999999999 > /dev/null  
# 在small组中起两个matho-primes进程,然后top观察cpu时间
# small组两个matho-primes进程差不多共享cpu,large组的进程得到更多的cpu时间

下次打算将cgroups应用到我们的计算存储一体机上,用来限制glusterfs进程和nova-compute,避免存储服务和计算服务抢占cpu等资源。

时间: 2024-10-18 14:38:01

Centos7 - 使用cgroups限制进程资源的相关文章

第5章 进程环境(4)_进程资源限制

5. 进程资源限制 (1)getrlimit.setrlimit函数 头文件 #include<sys/resource.h> 函数 int* getrlimit(int resource, struct rlimit* rlptr); 返回值 成功返回0,出错返回非0 功能 获得资源限制,存放在rlptr指向的结构体中 参数 (1)rlimit结构体 struct rlimit{ rlim_t rlim_cur; //软限制:当前限制 rlim_t rlim_max; //硬限制:rlim_

使用Shell脚本对Linux系统和进程资源进行监控

ShellLinux脚本 摘要:Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.本文我们以Bash做为实例总结了使用Shell对系统和进程资源进行监控的一些内容,希望对您能有帮助. Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命 令并把它送入内核去执行.实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.它没有一般编程语言的“

Linux系统开发 4 进程资源 环境 fork()子进程 wait() waitpid()僵尸 孤儿进程

<大纲> Linux系统编程 进程资源上限 进程环境变量 进程获取/修改环境变量 创建子进程fork() 最大进程数测试 程序的设置用户ID/组ID/黏住位 exec簇函数,执行程序覆盖堆栈 fork 与execl函数在一起 exec() 与主程序同一个PCB 僵尸进程 wait()回收僵尸进程 证明:父子进程同组pid waitpid() 非阻塞等待子线程发生变化 孤儿进程演示[父进程已经结束,子进程还在运行] 进程资源上限值 [email protected]:~$ cat /proc/s

zabbix监控php-status和进程资源使用率

入职以后,领导让我着手zabbix监控的部署和具体的维护.监控php首先就是一个挺重要的事情了.zabbix监控php可以通过php自带的一个status功能来监控,需要在配置文件里面开启,同时在nginx里面配置php status可以访问 1.php-fpm 开启status grep pm.status_path /usr/local/php/etc/php-fpm.conf pm.status_path = /php-fpm-status 默认情况下为/status,当然也可以改成/ph

进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE

摘要:本文主要介绍进程资源和进程状态.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.进程状态,就绪/运行状态.等待状态(可以被中断打断).等待状态(不可以被中断打断).停止状态和僵死状态. 1.进程资源 进程是Linux系统下资源管理的基本单位,每个进程都有自己的独立的运行空间.为了更好的管理Linux所访问的资源,系统引入了进程控制(PCB)的概念,PCB结构体. 进程资源由两部分组成:内核空间进程资源以及用户空间进程资源. 内核空间进程资源:指的就是PCB相关信息.包括进程控制

如何打开一个文本呢?启动进程资源

一句话搞定了,经常看到一些程序在保存为一个txt,或者excel的文件的时候,保存完毕立即打开,其实C#有一个函数可以实现 答案:参数输入文件的绝对路径 ///上面是保存文件的代码System.Diagnostics.Process.Start(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "LogRcptTo.log")); 如何打开一个文本呢?启动进程资源

使用 shell 脚本对 Linux 系统和进程资源进行监控

Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.它没有一般编程语言的“编译 - 链接 - 运行”过程.不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序.Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用

asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)

原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 --安装部署(一),遗留的问题而来,对程序添加守护进程,使网站可以持续化的运行起来. ? 1.介绍supervisor ?? ?Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,

如何灵活运用Linux 进程资源监控和进程限制

导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工作的方法,这些方法能够避免潜在的会导致生产环境下线或钱财损失的问题发生. 报告 Linux 进程统计信息 你可以使用 mpstat 单独查看每个处理器或者系统整体的活动,可以是每次一个快照或者动态更新. 为了使用这个工具,你首先需要安装 sysstat: # yum update && yum