第零章 序

在嵌入式平台调试程序的时候,经常会遇到进程占用cpu资源过高的情况,导致系统的稳定性降低,我们怎么来解决这个问题呢?
我们可以通过cpulimit工具来限制每个进程的cpu使用率,提供系统的整体稳定性。

cpulimit 命令的工作原理

为进程预设一个 cpu 占用率门限,并实时监控进程是否超出此门限,若超出则让该进程暂停运行一段时间。cpulimit 使用 SIGSTOP 和 SIGCONT 这两个信号来控制进程。它不会修改进程的 nice 值,而是通过监控进程的 cpu 占用率来做出动态调整。

cpulimit 的优势是可以控制进程的cpu使用率的上限值。但与 nice 相比也有缺点,那就是即使 cpu 是空闲的,进程也不能完全使用整个 cpu 资源。

第一章 安装及使用


wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

上面的命令行,会先从从 GitHub 上将源码下载到本地,然后再解压、编译、并安装到 /usr/bin 目录下。
现在就可以使用cpulimit命令了!

举例:

cpulimit –e httpd –l 40 #限制httpd(进程名)的cpu使用率为40%
cpulimit –e /usr/local/bin/httpd –l 40
cpulimit –p 2960 –l 55 #限制pid为2960的进程的CPU占用为55%

-e httpd, –exe=httpd,两者等同。
-l 40, –limit=40, 两者等同。
具体可以参考cpulimit -h帮助文档。

来看一个实例:

限制mysqld进程的CPU使用率在200%以内:

使用前:

使用后:

使用之后,cpu使用率被限制,因为是cpu使用率在动态变动,cpulimit不能非常及时准确的调整,偶尔会有超过200%,但是不会超过太多。

第二章 脚本控制CPU


创建脚本文件cpulimit.sh

#!/bin/bash
# auth:kaliarch
# func:sys info check
# version:v1.0
# sys:centos6.x/7.xset -e
[ $(id -u) -gt 0 ] && exit 1# cpu使用超过百分之多少进行限制
PEC_CPU=20# 限制进程使用百分之多少,如果程序为多线程,单个cpu限制为85,如果为多核心,就需要按照比例写,例如cpu为2c,像限制多线程占比80%,就写170
LIMIT_CPU=30
# 日志
LOG_DIR=/data/cpulimit/log/# 超过阀值进程pid
PIDARG=$(ps -aux |awk -v CPU=${PEC_CPU} '{if($3 > CPU) print $2}')
CPULIMITCMD=$(which cpulimit)install_cpulimit() {[ ! -d /tmp ] && mkdir /tmp || cd /tmpwget -c https://github.com/opsengine/cpulimit/archive/v0.2.tar.gztar -zxf v0.2.tar.gzcd cpulimit-0.2 && make[ $? -eq 0 ] && cp src/cpulimit /usr/bin/
}do_cpulimit() {
[ ! -d ${LOG_DIR} ] && mkdir -p ${LOG_DIR}
for i in ${PIDARG};
doMSG=$(ps -aux |awk -v pid=$i '{if($2 == pid) print $0}')echo ${MSG}[ ! -d /tmp ] && mkdir /tmp || cd /tmpnohup ${CPULIMITCMD} -p $i -l ${LIMIT_CPU} &echo "$(date) -- ${MSG}" >> ${LOG_DIR}$(date +%F).log
done
}main() {hash cpulimit if [ $? -eq 0 ];thendo_cpulimitelseinstall_cpulimit && do_cpulimitfi
}main

接着只需使用sh cpulimit.sh,这样程序就会获取CPU超百分之20的进程程序,然后CpuLImit就会限流到百分之30,并且记录限流日志。

如果需要不定时的启动,则可以在脚本中定下循环控制器,持续运行main。

CpuLimit脚本进程CPU使用率限制相关推荐

  1. 进程CPU使用率计算

    1.查看进程相关信息 cat /proc/进程号/stat 间隔period 秒再次查看进程信息,分别记录两次的utime和stime utime是第14位 stime是第15位 lastutime是 ...

  2. Ubuntu kswapd0 进程CPU使用率 超高

    今天租户的云主机遇到了一个很奇怪的问题,CPU占用一直100%居高不下. 客户环境: Ubuntu 18.04 LTS 应用:MYsql , Ngnix 使用top命令查看,kswapd0 进程CPU ...

  3. java进程cpu使用率高_什么会导致Java应用程序的CPU使用率飙升?

    问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...

  4. Windows下用C语言获取进程cpu使用率,内存使用,IO情况

    /** @file * @brief 进程统计信息函数的声明 * @author 张亚霏 * @date 2009/05/03 * @version 0.1 * */ #ifndef PROCESS_ ...

  5. c语言占用cpu的程序,Windows下用C语言获取进程cpu使用率,内存使用,IO情况

    转自: http://zhangyafeikimi.iteye.com/blog/378658 process_stat.h /** @file * @brief 进程统计信息函数的声明 * @aut ...

  6. linux 循环 cpu使用率脚本,监控CPU使用率的三种方法(shell脚本)

    监控CPU使用率的三种方法(shell脚本),供大家学习参考. 方法一: 复制代码 代码如下: #!/bin/sh #监控CPU使用率 #Written by Chameleon #Http://ch ...

  7. redis进程CPU使用率100%,kdevtmpfsi木马清除

    病毒表现 CPU使用率无限接近100%,我的四核系统CPU使用率一直再395%-399%波动. 故障出现时间 宝塔面板安装redis之后 问题查找(百度) 木马病毒--kdevtmpfsi 通过red ...

  8. Java进程CPU使用率高排查

    1.使用top 定位到占用CPU高的进程PID top 通过ps aux | grep PID命令 2.获取线程信息,并找到占用CPU高的线程 ps -mp pid -o THREAD,tid,tim ...

  9. 【Linux】限制进程的CPU使用率

    目录 限制进程CPU使用率 限制进程资源的工具 限制进程CPU使用率 工具  cpulimit 安装 1. cpulimit安装 1.1 Ubuntu/Debian: # apt-get instal ...

最新文章

  1. 数论(一)——素数,GCD,LCM
  2. JavaWeb编程(十)Json语句
  3. 1.13 总结-深度学习第五课《序列模型》-Stanford吴恩达教授
  4. 阿里云前端周刊 - 第 13 期
  5. 503 service unavailable错误提示如何解决
  6. C语言再学习 -- 存储类、链接
  7. csv 导 mysql
  8. 计算机标准符合,计算机专利申请要符合哪些标准
  9. mysql-电商库演练1-创建数据-基本查询练习
  10. 最简单的《域中隔离用户的FTP站点》详解
  11. 【POJ 3276】【开关问题】Face The Right Way【暑期 No.4】
  12. STC单片机烧录时的坑不要踩
  13. linux acpidtd 进程,MaciASL提取的原版的DTDS编译提示有错误,大牛帮忙看下吧。
  14. 计算机图形学--全局光照(屏幕空间:SSDO,SSR)
  15. 《具体数学》部分习题解答2
  16. 使用学信网验证报告免费使用jetbrains全家桶
  17. 新手怎么创建域名?创建域名后怎么样建站?
  18. 微信端跳到外部浏览器进行apk文件下载
  19. python判断性别_惊呆|根据三围数据判断出用户性别竟是python使用逻辑回归算法搞的鬼!...
  20. [动态规划] 区间DP

热门文章

  1. Linux完全卸载MySQL,干干净净
  2. 正则表达式 IP 正则表达式 合法IP
  3. Flutter Crad学习日记
  4. 延续千年腊八传统 山东孔府布粥暖年味
  5. 产品经理懂点技术之:什么是前后端,他们怎么分工的?
  6. Bluemix实战教程: CF命令学习分享
  7. Android room操作数据库
  8. js获取model里面的数据
  9. [BC#89B]Fxx and game
  10. python 钉钉机器人发送图片,python操作钉钉机器人发送各种消息