首页 > 转载和其他 > linux系统限制进程的cpu使用率
2017
01-26

linux系统限制进程的cpu使用率

cpu是公平的,大多数进程以相同的优先级启动,并且Linux内核在处理器上平均地为每个任务调度时间。在资源紧张时,cpu一般也是平均的分配进程占用cpu的时间片段。不过我们要对某些进程调高优先级,或者降低某进程的优先级呢,我们可以用下面几种方式控制cpu:

  • 系统limits配置文件/etc/security/limits.conf
  • taskset命令设置
  • 手动调整nice值
  • cpulimit  https://github.com/opsengine/cpulimit
  • 使用Linux的cgroup (control group,玩过docker应该都听说过),这种机制调度程序,限制进程可用的资源量

limits.conf配置文件针对单个回话,可以限制用户、用户组、soft limits、hard limits等

taskset命令用法:taskset -pc cpu的第几核心  pid

nice命令大家都知道,系统默认启动后进程就有指定的nice值,top命令的NI列就是,越低的数值优先级越高。nice不是优先级,表示进程可被执行的优先级的修正数值,优先级pri = 现在运行进程的pri + nice值

Cpulimit是一个限制进程的CPU使用率(以百分比表示,而不是CPU时间)的工具。当您不希望它们占用太多的CPU周期时,控制批处理作业非常有用。目标是防止进程运行超过指定的时间比率。它不会改变nice值或其他调度优先级设置,但真正的CPU使用率。此外,它能够自动适应总体系统负载,动态和快速。所使用的CPU量的控制是通过向进程发送SIGSTOP和SIGCONT POSIX信号来完成的。所有子进程和指定进程的线程将共享相同百分比的CPU

再说说控​​​制​​​族​​​群​​​(control group),Cgroup 可​​​让​​​您​​​为​​​系​​​统​​​中​​​所​​​运​​​行​​​任​​​务​​​(进​​​程​​​)的​​​用​​​户​​​定​​​义​​​组​​​群​​​分​​​配​​​资​​​源​​​ — 比​​​如​​​ CPU 时​​​间​​​、​​​系​​​统​​​内​​​存​​​、​​​网​​​络​​​带​​​宽​​​或​​​者​​​这​​​些​​​资​​​源​​​的​​​组​​​合​​​。nice或cpulimit仅限制进程的CPU使用率,而cgroup可以限制其他进程资源。​​​根据​​​配​​​置​​​​​​ cgroup,使得拒​​​绝​​​ cgroup 访​​​问​​​某​​​些​​​资​​​源​​​,甚​​​至​​​在​​​运​​​行​​​的​​​系​​​统​​​中​​​动​​​态​​​配​​​置​​​您​​​的​​​ cgroup。​​​可​​​将​​​ cgconfig(“控​​​制​​​组​​​群​​​配​​​置​​​ ”)服​​​务​​​配​​​置​​​为​​​在​​​引​​​导​​​时​​​启​​​动​​​,并​​​重​​​新​​​建​​​立​​​您​​​预​​​先​​​定​​​义​​​的​​​ cgroup,这​​​样​​​可​​​使​​​其​​​在​​​重​​​启​​​过​​​程​​​中​​​保​​​留​​​它​​​们​​​。​​​
使​​​用​​​ cgroup,系​​​统​​​管​​​理​​​员​​​可​​​更​​​具​​​体​​​地​​​控​​​制​​​对​​​系​​​统​​​资​​​源​​​的​​​分​​​配​​​、​​​优​​​先​​​顺​​​序​​​、​​​拒​​​绝​​​、​​​管​​​理​​​和​​​监​​​控​​​。​​​可​​​更​​​好​​​地​​​根​​​据​​​任​​​务​​​和​​​用​​​户​​​分​​​配​​​硬​​​件​​​资​​​源​​​,提​​​高​​​总​​​体​​​效​​​率​​​。​​​redhat官方文档控​​​制​​​族​​​群点我

我们做个测试,网上有个质数生成器mathomatic,能彪高cpu,压缩包地址https://pan.baidu.com/s/1nvhm4op

下面只试验两个常用的nice和cgroup命令,ps查看进程的信息

一,nice修改进程的优先级

在双核的虚拟机执行命令后,得到的结果是cpu使用率一样,并不是nice为0的cpu使用高,20的使用低,没有得到所需要的结果,在top中可以看到其中一个cpu使用率100%,另一个为0。再把cpu由2核改为1核,启动后测试得到正确的结果,下面2张图对比一下,上面是2颗cpu,下面是1颗。由此可以知晓,在多核心的cpu上,用nice命令需要注意,nice命令适用于更改一次优先级的任务。或者说只有出现cpu争用的时候,优先级这个长着才会出来调解,解决谁可以占用多的资源,如果cpu空闲的话,资源充足,当然也就不用限制了

linux系统限制进程的cpu使用率 - 第1张  | linux工匠|关注运维自动化|Python开发|linux高可用集群|数据库维护|性能提优|系统架构

linux系统限制进程的cpu使用率 - 第2张  | linux工匠|关注运维自动化|Python开发|linux高可用集群|数据库维护|性能提优|系统架构

二,cgroup命令使用

配置文件:/etc/cgconfig.conf

测试用两个组来做对比,

cpu控制器有一个称为cpu.shares的属性。它由内核使用,以确定可用于cgroup中的每个进程的CPU资源的份额。默认值为1024.通过将一个组(nocpulimited)保留为默认值1024,将另一个组(cpulimited)设置为512,我们告诉内核使用2:1的比例分割CPU资源。同时执行两个进程,如果单独执行一个任务,cpu不会限制利用率

linux系统限制进程的cpu使用率 - 第3张  | linux工匠|关注运维自动化|Python开发|linux高可用集群|数据库维护|性能提优|系统架构

cgroup的文档中有详细的用法,做饭是:

  • 创建层级并​​​设​​​定​​​子​​​系​​​统​​​参​​​数​​​
  • 创建组群条目,就是分组,设置cpu.shares
  • 附加子系统,即把组群配置信息添加cgconfig.conf配置文件中
  • 创建cgroup,即上面的cgcreate命令
  • cgset命令设置参数
  • 在cgroup中启动一个进程,即上面的cgexec
  • 查​​​找​​​某​​​个​​​进​​​程​​​所​​​属​​​ cgroup,命令:ps -O cgroup

由此可以看出cgroup很强大。隔离资源利用率最好还是用cgroup

最后编辑:
作者:bbotte
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。