阿里云
向代码致敬,寻找你的第83行
发表主题 回复主题
  • 8630阅读
  • 6回复

老司机教你用 cpulimit 防止 CPU 过载而翻车

级别: 论坛版主
发帖
9333
云币
14093
— 本帖被 不靠谱贝贝 设置为精华(2016-12-02) —
前言 })W9=xO~  
|_."U9!Z^  
]8q#@%v }  
开车了,开车了,论如何使用 cpulimit 防止老司机在 ECS 上翻车。 x1H1[0w,i  
Lh%z2 5t  
很多朋友如果只是购买的单核心实例,如果跑的 MYSQL 过载了或者遭遇一些逻辑缺陷的软件造成 CPU 过载和服务假死,导致网站打不开或者 502 错误啥的。所以我们可以借助一些软件来限制 CPU 的使用率和 IO。 还有千万不要用跑分软件跑分,不然准翻车。 k%uR!cL  
E|{(O  
安装 scX'>\w&c  
Ln:6@Ok)5%  
GsIVx!  
cpulimit 就是一款可以对 CPU 使用率进行控制的软件。 $mxm?7ZVR  
(xpt_]Q!H  
包安装 f~Y;ZvB  
/]j^a:#"6t  
Centos: ! Gob `# r  
  1. yum install cpulimit
r$[`A_  
"5<:Dj/W  
Debian/Ubuntu i>z_6Gax*[  
  1. apt-get install cpulimit
P5Lb)9_Jw  
OfG/7pw5%B  
编译安装 L4O.=*P1  
  1. cd  /tmp
  2. wget  'http://downloads.sourceforge.net/cpulimit/cpulimit-1.1.tar.gz'
  3. tar  cpulimit-1.1.tar.gz
  4. cd cpulimit-1.1
  5. make
  6. cp cpulimit  /usr/local/sbin/
  7. rm -rf cpulimit*
aVB/Co M9  
W(pq_H'  
使用 hL4T7`  
l266ufO.u-  
zh{,.c  
%xt;&HE  
说明 %k%%3L,  
[Ef6@  
  1. cpulimit -h
  2. Usage: cpulimit [OPTIONS...] TARGET
  3.    OPTIONS
  4.       -l, --limit=N          percentage of cpu allowed from 0 to 100 (required)//cpu限制的百分比
  5.       -v, --verbose          show control statistics//显示版本号
  6.       -z, --lazy             exit if there is no target process, or if it dies//如果限制的进程不存在了,则退出。
  7.       -i, --include-children limit also the children processes//包括子进程。
  8.       -h, --help             display this help and exit //帮助,显示参数
  9.    TARGET must be exactly one of these:
  10.       -p, --pid=N            pid of the process (implies -z) //进程的pid
  11.       -e, --exe=FILE         name of the executable program file or path name //可执行程序
  12.       COMMAND [ARGS]         run this command and limit it (implies -z)
K|pg'VT"  
CbGfVdw/c  
Su/8P[q_  
用法 P~ : N  
ZnKjU ]m  
W4;/;[/L  
限制firefox使用30% cpu 利用率 $RH.  
  1. cpulimit -e firefox -l 30
H;nEU@>"Z  
限制进程号1313的程序使用30% cpu 利用率 fj|b;8_}l  
  1. cpulimit -p 1313 -l 30
@E 8P>kq  
限制绝对路径下该软件的 cpu 利用率
  1. [b][/b]
  2. cpulimit -e /usr/local/nginx/sbin/nginx -l 50
oyB gF\  
(Bq^ D9  
apOXcZ   
注意事项 }!Y=SP1e  
XGuxd  
  1. -l后面限制的cpu使用量,要根据实际的核心数量而成倍减少。40%的限制生效在1核服务器中,如果是双核服务器,则应该限制到20%,四核服务器限制到10%以此类推。
  2. root用户可以限制所有的进程,普通用户只能限制己有权限管理的进程。
eFh7#~m  
_aeIK  
限制所有进程的 CPU 使用率 3v@h&7<E  
li hIPMU  
NnH]c+  
默认情况下 cpulimit 只能对已经存在的进程进行限制,但是设置此脚本为随机自启动即可(设置方法参看上面的脚本链接中),它会对所有进程(包括新建进程)进行监控并限制(3秒检测一次,CPU限制为75%) Vwu dNjL  
VV;%q3}:  
5U-SIG*  
这就可以防止因为 CPU 使用率过高而被 suspend 了! ({ O~O5k  
  1. #!/bin/bash
  2. while true ; do
  3.   id=`ps -ef | grep cpulimit | grep -v "grep" | awk '{print $10}' | tail -1`
  4.   nid=`ps aux | awk '{ if ( $3 > 75 ) print $2 }' | head -1`
  5.   if [ "${nid}" != "" ] && [ "${nid}" != "${id}" ] ; then
  6.     cpulimit -p ${nid} -l 75 &
  7.     echo "[`date`] CpuLimiter run for ${nid} `ps -ef | grep ${nid} | awk '{print $8}' | head -1`" >> /root/cpulimit-log.log
  8.   fi
  9.   sleep 3
  10. done
#M%K82"  
G9^xv  
V/3@iOwD  
[ *Dj7z t:  
Fw\g\  
保存到 /root/cpulimit.sh,会自动生成日志文件 /root/cpulimit-log.log f8 BZkh  
然后将此降本添加开机启动。 !&xci})7a  
zauDwV=  
Eug RC  
设置为开机启动 h!@7'Q  
t~7OtPF  
@@j:z;^|  
修改 /etc/rc.local 在对应位置加入 /root/cpulimit.sh 再重启系统,就会全程限制各个进程的 CPU 使用了! zYrJ Hn#vB  
[^Bjmw[7  
[ 此帖被ivmmff在2016-12-02 17:45重新编辑 ]
级别: 新人
发帖
9
云币
16
只看该作者 沙发  发表于: 2016-12-17
Re老司机教你用 cpulimit 防止 CPU 过载而翻车
线上谁用
级别: 论坛版主
发帖
9333
云币
14093
只看该作者 板凳  发表于: 2016-12-18
回 1楼(歪歪什么) 的帖子
https://bbs.aliyun.com/read/302206.html m=Mb'<  
o>|&k]W/  
配合我这个,就可以在生产环境用
级别: 禁止发言
发帖
11
云币
22
只看该作者 地板  发表于: 2016-12-28
用户被禁言,该主题自动屏蔽!
级别: 新人
发帖
17
云币
20
只看该作者 4楼 发表于: 2016-12-29
Re老司机教你用 cpulimit 防止 CPU 过载而翻车
有windows版本的吗?
级别: 小白
发帖
28
云币
39
只看该作者 5楼 发表于: 2017-01-08
Re老司机教你用 cpulimit 防止 CPU 过载而翻车
达到控制值会有什么效果?还会502或者504错误吗?
级别: 架构狮
发帖
1240
云币
1998
只看该作者 6楼 发表于: 01-23
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个