本文共 1742 字,大约阅读时间需要 5 分钟。
近日在客户系统运维中发现,有系统在定时脚本执行期间会将Linux系统CPU利用率跑满,导致其他服务受到影响,故查阅资料发现有大神写的CPU利用率限制程序。
地址:根据此编写脚本,配合定时任务放置在服务器上,达到限制程序CPU情况,可根据自己系统CPU核心数进行参数配置,会记录CPU超过阀值的日志,可供后期进行查看分析。
GIT地址:
#!/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=80# 限制进程使用百分之多少,如果程序为多线程,单个cpu限制为85,如果为多核心,就需要按照比例写,例如cpu为2c,像限制多线程占比80%,就写170LIMIT_CPU=85# 日志LOG_DIR=/var/log/cpulimit/# 超过阀值进程pidPIDARG=$(ps -aux |awk -v CPU=${PEC_CPU} '{if($3 > CPU) print $2}')CPULIMITCMD=$(which cpulimit)install_cpulimit() { [ ! -d /tmp ] && mkdir /tmp || cd /tmp wget -c https://github.com/opsengine/cpulimit/archive/v0.2.tar.gz tar -zxf v0.2.tar.gz cd cpulimit-0.2 && make [ $? -eq 0 ] && cp src/cpulimit /usr/bin/}do_cpulimit() {[ ! -d ${LOG_DIR} ] && mkdir -p ${LOG_DIR}for i in ${PIDARG};do MSG=$(ps -aux |awk -v pid=$i '{if($2 == pid) print $0}') echo ${MSG} [ ! -d /tmp ] && mkdir /tmp || cd /tmp nohup ${CPULIMITCMD} -p $i -l ${LIMIT_CPU} & echo "$(date) -- ${MSG}" >> ${LOG_DIR}$(date +%F).logdone}main() { hash cpulimit if [ $? -eq 0 ];then do_cpulimit else install_cpulimit && do_cpulimit fi }main
为配合测试利用python编写测试脚本来将CPU跑满
#!/bin/env pythonimport mathimport randoma=10000b=10000c=10000sum=0for i in range(0,a): for j in range(0,b): randomfloat=random.uniform(1,10) randompow=random.uniform(1,10) sum+=math.pow(randomfloat, randompow)print "sum is %s" % sum
制作定时任务
脚本本身本身只使用了一个核心,跑了两个测试脚本,将CPU跑到100%
查看已经有两个cpulimt进对测试程序进行了CPU使用率限制
记录下了cpulimit限制时刻的日志
查看cpu利用率已经限制到了85%
转载于:https://blog.51cto.com/kaliarch/2318020