在日常的运维过程中,cpu资源消耗过高,可能算是一种比较常见的场景,如下是和cpu问题相关的历史文章,

《如何捕获问题SQL解决过度CPU消耗的问题》

《一个Full GC次数过多导致系统CPU 100%的案例排查》

《解决打开IE浏览器CPU升高》

现在我们使用的服务器都是多核,但即使核再多,还是有个上限,不可能让应用无限制地使用,因此,合理控制cpu资源使用就是一个比较重要的手段。杨老师的这篇文章《如何控制cpu资源使用》,给我们介绍了一些相关的操作。

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

限制cpu的方法有以下几种,

1. taskset

2. cpulimit

3. 使用nice和设置程序执行的优先级

4. 使用ulimit限制cpu

下面着重介绍taskset和cpulimit的方法,方法3和4在现有环境中操作性不强。

1. taskset

-p,--pid       对一个已存在的pid进行操作
-c,--cpu-list  限定进程到指定的cpu上,可以指定多个,以逗号分隔,也可指定范围:1,2,5,6-8。

(1)使用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 cachedPID 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

(2)使用taskset将19041绑定到核1,

[root@rac1 ~]# taskset  -pc 1 19041
pid 19041's current affinity list: 0,1
pid 19041's new affinity list: 1

2. 使用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.

(1)安装,

[root@rac1 ~]# svn checkout cpulimit
[root@rac1 ~]# cd cpulimit/
[root@rac1 cpulimit]# make

(2)使用,

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是限定某个进程的使用cpu使用率,而非像taskset绑定某个进程到指定的cpu上面。cpulimit的具体用法,可参见cpulimit --help。

3. 使用nice和renice设置程序执行的优先级

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

4. 使用ulimit

在Linux中,使用ulimit可以限制shell中的资源使用。ulimit用于限制shell启动进程所占用的资源,支持以下各种类型的限制,

a 所创建的内核文件的大小、
b 进程数据块的大小、
c Shell 进程创建文件的大小、
d 内存锁住的大小、
e 常驻内存集的大小、
f 打开文件描述符的数量、
g 分配堆栈的最大大小、
h CPU 时间、
i 单个用户的最大线程数、
j Shell 进程所能使用的最大虚拟内存。
k 支持硬资源和软资源的限制。

注意,ulimit只对当前shell有效。

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

近期更新的文章:

《什么是快碳、慢碳?》

《卡塔尔世界杯亚洲球队表现给我们的一些启示和思考》

《最近碰到的一些问题》

《MySQL中USER()和CURRENT_USER()的区别》

《MySQL锁等待超时的解决路径》

近期的热文:

《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:

《公众号1100篇文章分类和索引》

如何控制cpu资源使用?相关推荐

  1. 8s保留cpu设置_使用资源设置控制CPU资源

    如果即使在前面讨论过的所有方案之后也无法重新平衡CPU负载或提高处理器效率,那么可能还有一些原因是保持主机CPU仍然饱和​​. 它可以是资源池及其对VM的资源分配. 许多应用程序(例如批处理作业)通过 ...

  2. Linux资源控制-CPU和内存【转】

    转自:http://www.cnblogs.com/wang_yb/p/3942208.html 主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进 ...

  3. Linux资源控制-CPU和内存

    https://www.cnblogs.com/wang_yb/p/3942208.html 主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进程能 ...

  4. Linux资源控制-使用cgroup控制CPU和内存

    原文地址:http://www.cnblogs.com/wang_yb/p/3942208.html 主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每 ...

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

    cgroup介绍 cgroup是control group的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统. Cgroups是control ...

  6. Docker容器对CPU资源隔离的几种方式

    了解Docker的同学应该知道,Docker的一个很大的特性就是可以对各种资源做隔离以及限制,这些资源包括CPU.内存.网络.硬盘,关于内存.网络.硬盘的资源限制都比较好理解,无非就是分多少用多少,比 ...

  7. nginx 性能优化的概述及在CPU资源方面的处理

    nginx的性能优化的概述 软件层面的提升硬件的使用率 增大CPU的利用率 增大内存的利用率 增大磁盘IO利用率 增大网络带宽利用率 提升硬件规格 网卡:万兆网卡.例如10G.25G.40G等 磁盘: ...

  8. Docker CPU 资源限制——CPU分片功能测试

    之前的一篇随笔--Docker CPU 资源限制 中介绍了针对COU的某个或某几个核的控制,今天介绍下CPU分片功能,即CPU占比. 测试步骤 1.下载CPU测试image.agileek/cpuse ...

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

    在MTK芯片上如何控制CPU的核数和频率-MTK PerfService 一句话:PerfService就是用来调整CPU/GPU资源的.对于老的API,可以更简单地讲就是调CPU核数和CPU频率的. ...

  10. Docker 4 Docker安全(cgroup控制容器资源),lxcfs安全加固,docker-machine部署及配置,docker-compose的部署

    1.使用内核自带Cgroups 控制docker资源上限: 1.1: pwd :/sys/fs/cgroup/cpu查看docker集成的cgoups控制cpu的命令:(还有memory) [root ...

最新文章

  1. fopen和fopen_s用法的比较
  2. vectorvectorint 二维容器编程
  3. POJ 1850 Code
  4. Linux 命令速查
  5. Java 多线程 4:wait() 和 notify()/notifyAll()
  6. sql 更新一些特殊要求字段(批量)
  7. 硬件加速 | 基于FPGA的深度学习CNN加速器设计(论文复现)
  8. html怎么设置文字竖排,CSS文字竖排
  9. shell 脚本 基础
  10. 关联规则与强关联规则计算
  11. 归并排序(C语言版)
  12. ABP VNext学习日记17
  13. 美团校招php笔试题,【美团点评】2020校招数据分析方向笔试题
  14. QCC304x/QCC514x Pydbg在线调试
  15. matlab中的小波变换,小波变换在matlab中的使用
  16. 好消息,发现一款知网学术不端论文检测查重助手,永久免费分享给大家使用
  17. Keil-C51 与 Keil -ARM 共存的方法
  18. 液压控制系列之活塞位置测量(带原点标定功能)
  19. 物联网IoT平台 设备影子服务 业务流程
  20. 龙应台写给儿子安德烈的信

热门文章

  1. excel一列求和_EXCEL表格怎么自动求和?4种典型批量求和套路
  2. blk_update_request: I/O error,dev fd0, sector 0
  3. 面试常见的 10 大问题
  4. Web前端面试常见问题
  5. 豆知识( DNS; HTTP入门;网络协议)
  6. 发送ajax将浏览器卡死,jQuery Ajax同步参数致使浏览器假死怎么办
  7. 1880-2010年间全美婴儿姓名
  8. matlab在三维人体及服装建模上的应用,Matlab在三维人体及服装建模上的应用
  9. 为什么我没圣诞帽!?微信一键生成圣诞帽方法
  10. 我新鲜出炉的 plist 图集拆图工具!github