Linux系统进程CPU使用率限制脚本

一、背景

近日在客户系统运维中发现,有系统在定时脚本执行期间会将Linux系统CPU利用率跑满,导致其他服务受到影响,故查阅资料发现有大神写的CPU利用率限制程序。
地址:CPU Usage Limiter for Linux

根据此编写脚本,配合定时任务放置在服务器上,达到限制程序CPU情况,可根据自己系统CPU核心数进行参数配置,会记录CPU超过阀值的日志,可供后期进行查看分析。

二、脚本

GIT地址:cpulimit.sh

#!/bin/bash
# auth:kaliarch
# func:sys info check
# version:v1.0
# sys:centos6.x/7.x

set -e
[ $(id -u) -gt 0 ] && exit 1

# cpu使用超过百分之多少进行限制
PEC_CPU=80

# 限制进程使用百分之多少,如果程序为多线程,单个cpu限制为85,如果为多核心,就需要按照比例写,例如cpu为2c,像限制多线程占比80%,就写170
LIMIT_CPU=85
# 日志
LOG_DIR=/var/log/cpulimit/

# 超过阀值进程pid
PIDARG=$(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).log
done
}

main() {

    hash cpulimit 
    if [ $? -eq 0 ];then
        do_cpulimit
    else
        install_cpulimit && do_cpulimit
    fi          
}

main

三、测试

3.1 测试脚本

为配合测试利用python编写测试脚本来将CPU跑满

#!/bin/env python

import math
import random

a=10000
b=10000
c=10000

sum=0

for 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

制作定时任务
Linux系统进程CPU使用率限制脚本

3.2 运行脚本

脚本本身本身只使用了一个核心,跑了两个测试脚本,将CPU跑到100%
Linux系统进程CPU使用率限制脚本

3.3 查看进程

查看已经有两个cpulimt进对测试程序进行了CPU使用率限制
Linux系统进程CPU使用率限制脚本

3.4 查看日志

记录下了cpulimit限制时刻的日志
Linux系统进程CPU使用率限制脚本

3.5 查看CPU利用率

查看cpu利用率已经限制到了85%
Linux系统进程CPU使用率限制脚本

转载于:https://blog.51cto.com/kaliarch/2318020

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值