【系统】如何控制cpu资源使用

 在我们运维的db环境中,一个机器跑多个mysql实例经常会出现某个进程占用了几乎所有的cpu 进而影响其他的实例运行。基于此我们需要限制某个进程的cpu资源,将其使用 的cpu限定在某个或者某几个固定的cpu上,避免对其他的进程产生影响。

限制cpu的方法有以下几种:
1 taskset
2 cpulimit
3 使用nice和renice设置程序执行的优先级
4 使用ulimit 限制cpu  

下面着重介绍taskset cpulimit 的方法。 方法 3 4 在现有环境中操作性不强。
一 taskset 
-p,--pid      对一个已存在的pid进行操作
-c,--cpu-list  限定进程到指定的cpu上,可以指定多个,以逗号分隔,也可指定范围:1,2,5,6-8。

a 使用 top 获取占用cpu 资源最多的进程。
top - 21:23:41 up 318 days, 23:00,  4 users,  load average: 3.79, 3.77, 3.67
Tasks: 202 total,   2 running, 200 sleeping,   0 stopped,   0 zombie
Cpu0  : 55.0%us, 12.7%sy,  0.0%ni, 15.7%id, 16.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 55.7%us, 12.7%sy,  0.0%ni, 17.7%id, 12.7%wa,  0.3%hi,  1.0%si,  0.0%st
Mem:   4044720k total,  4019124k used,    25596k free,    50820k buffers
Swap:  4192956k total,  2091956k used,  2101000k free,  1625080k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                  
19041 mysql     18   0 2621m 2.0g 5148 S 119.4 50.8 439:34.34 mysqld

b 使用 taskset 将19041 绑定到 核1
[root@rac1 ~]# taskset  -pc 1 19041
pid 19041's current affinity list: 0,1
pid 19041's new affinity list: 1

二 使用 cpulimit 对cpu进行限定
     cpulimit is a simple program that attempts to limit the cpu usage of a process (expressed in percentage, not in cpu time). This is useful to control batch jobs, when you don't want them to eat too much cpu. It does not act on the nice value or other scheduling priority stuff, but on the real cpu usage. Also, it is able to adapt itself to the overall system load, dynamically and quickly.

a 安装
[root@rac1 ~]# svn checkout https://cpulimit.svn.sourceforge.net/svnroot/cpulimit/trunk cpulimit
[root@rac1 ~]# cd cpulimit/
[root@rac1 cpulimit]# make

b 使用
cpulimit 参数   目标进程 
Usage: cpulimit [OPTIONS...] TARGET
  参数
      -l, --limit=N          限定cpu使用率范围 0-200 %
  目标进程必须有以下参数限定:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
测试场景  开启一个tpcc 压测模型 对mysql 进程进行压测使其cpu使用率达到满负荷

使用cpu进行限制之前

使用cpulimit -e mysqld -l 70 -z -v 命令对mysqld进程进行限制

使用cpulimit 限制之后

需要说明的是 cpulimit 是限定某个进程的使用 cpu使用率,而非像taskset 绑定某个进程到指定的cpu上面。cpulimit的具体用法 详见cpulimit --help

 

三 使用nice和renice设置程序执行的优先级
格式:nice [-n 数值] 命令
nice 指令可以改变程序执行的优先权等级。指令让使用者在执行程序时,指定一个优先等级,称之为 nice 值。这个数值从最高优先级的-20到最低优先级的19。负数值只有 root 才有权力使。一般使用者,也可使用 nice 指令來做执行程序的优先级管理,但只能将nice值越调越高。
可以通过二种方式来给某个程序设定nice值:
1 用nice命令为开始执行程序设置一个nice值,如 nice 2  sh  backup.sh & 
2 如果调整某个运行中程序的PID的nice值,则用renice命令

四  使用ulimit 

在linux中,使用ulimit可以限制SHELL中的资源使用。ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:
a 所创建的内核文件的大小、
b 进程数据块的大小、
c Shell 进程创建文件的大小、
d 内存锁住的大小、
e 常驻内存集的大小、
f 打开文件描述符的数量、
g 分配堆栈的最大大小、
h CPU 时间、
i 单个用户的最大线程数、
j Shell 进程所能使用的最大虚拟内存。
k 支持硬资源和软资源的限制。
注意:ulimit只对当前shell有效. 

时间: 2024-10-03 04:41:38

【系统】如何控制cpu资源使用的相关文章

Java应用程序中动态分配CPU资源

一个多任务系统需要在任务之间实现QoS(Quality of Service)管理时,如果CPU资源的分配基于Java线程的优先级,那么它在不同平台上运行时的效果是很难预测的. 本文利用协调式多任务模型,提出一个与平台无关.并且能在任务间动态分配CPU资源的方案. 现在,由于计算机系统已经从人机交互逐步向机机交互转化,计算机和计算机之间的业务对于时间的要求非常高.软件系统对于业务的支持已经不仅表现为对不同业务的逻辑和数据(算法+数据结构)支持,而且还表现为对同时处理不同任务的时效性(任务响应速度

win7系统Svchost.exe占用cpu资源过高怎么办

win7系统Svchost.exe占用cpu资源过高的解决方法 先来看一下任务管理器下Svchost.exe占用了47%的CPU资源,在高的时候达到80%以上 我们首先右键点击任务栏空白处,然后在弹出菜单中选择"启动任务管理器"菜单项 在打开的任务管理器中点击"查看/选择列"菜单项 这时会打开选择进程页列窗口,选中最上面的"PID(进程标识符)"前的复选框 这时在任务管理器中就可以看到多了一个PID列,我们看到占用CPU资源高的Svchost.e

android系统cpu资源相关查询

android系统cpu资源相关查询        我们都知道android是基于linux系统内核的,在linux系统中我们查看系统资源消耗情况,一个可以直接通过命令行的top命令来看,里面有cpu具体的使用情况,当然在android系统上也还是保留了的.top还是很有用,那在android应用上怎么表现出来呢?       在[设置]应用中,在开发者选项里面就有一项现成的看cpu使用情况的,具体情况的显示是显示在ui的系统层,而不是activities,是始终高于activities的,保障

cgroup介绍、安装和控制cpu,内存,io示例

cgroup介绍         cgroup是control group的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统.             Cgroups是control groups的缩写,最初由Google工程师提出,后来编进linux内核.         Cgroups是实现IaaS虚拟化(kvm.lxc等),PaaS容器沙箱(Docker等)的资源管理控制部分的底层基础         子系统是根据cgroup对任务的

在Linux系统中限制CPU占用率的教程

  Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的正常运转. 同时,内核也很公正:它将资源公平地分配给各个进程. 但是,如果你需要给一个重要进程提高优先级时,该怎么做呢? 或者是,如何降低一个进程的优先级? 又或者,如何限制一组进程所使用的资源呢? 答案是需要由用户来为内核指定进程的优先级 大部分进程启动时的优先级是相同的,因此Linux内核会公平地进行调度. 如果想让一个CPU密集型的进程运行在较低优先级,那么你就得事先配置好调度器. 下面介绍3种控制

《OpenACC并行程序设计:性能优化实践指南》一 1.6 控制并行资源

1.6 控制并行资源 accParaCounter.cpp中的嵌套循环结构可以用来控制循环并行性,因此可以控制并行资源消耗. 大多数并行编程人员遵循在系统中利用最大并行性来实现最高性能的方法. 大量线程背后的思路是给予并行调度器尽可能多的线程以供调度,从而最大化地利用所有计算资源.GPU编程人员喜欢用占有率(occupancy)作为线程并行度的度量.高占有率意味着调度器有更多的激活线程以供调用,因此有机会实现更高性能. 高占有率并不一定转为最快的应用性能.指令级并行(Instruction le

在MTK芯片上如何控制CPU的核数和频率-MTK PerfService

在MTK芯片上如何控制CPU的核数和频率-MTK PerfService 一句话:PerfService就是用来调整CPU/GPU资源的.对于老的API,可以更简单地讲就是调CPU核数和CPU频率的. PerfService简介 kernel中实现了两个driver,一个负责控制开关CPU的核数,叫做hot-plug驱动,另一个负责调整CPU的频率,叫做DVFS驱动. kernel中的driver会根据系统的负载情况下,自动调整使用几个CPU和调整CPU频率.如果负载高了,提高频率,或者多开几个

高并发Web服务的演变——节约系统内存和CPU

高并发Web服务的演变--节约系统内存和CPU 一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现在的硬件越来越便宜,但是一味地通过增加机器来解决并发量的增长,成本是非常高昂的.结合技术优化方案,才是更有效的解决方法. 并发连接数为什么呈指数增长?实际上,从这几年的用户基数上看,这个数量并没有出现指数增长,因此它并非主要原因.主要原因,还是web变

windows2003服务器上IIS占用CPU资源100%的解决办法

iis|window|windows2003|服务器|解决 以下是方案1:现象:机器正在调试或允许IIS时,被异常中断服务(比如停电),然后再次IIS运行页面时,CPU资源占用100%,即使重新启动也无效. 原因:发生中断时,IIS会写异常日志,但是此时写入了乱码,造成IIS一直写日志的死循环,耗尽了系统资源.找到系统路径\System32\Logfiles\W3SVC1 下当天的错误日志文件,即可看到以上内容. 解决:删除 系统路径\System32\Logfiles\W3SVC1 下当天的错