Linux系統進程CPU使用率限制腳本

1、背景

近日在客戶系統運維中發現,有系統在定時腳本執行期間會將Linux系統CPU利用率跑滿,致使其餘服務受到影響,故查閱資料發現有大神寫的CPU利用率限制程序。
地址:CPU Usage Limiter for Linuxpython

根據此編寫腳本,配合定時任務放置在服務器上,達到限制程序CPU狀況,可根據本身系統CPU核心數進行參數配置,會記錄CPU超過閥值的日誌,可供後期進行查看分析。git

2、腳本

GIT地址:cpulimit.shgithub

#!/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、測試

3.1 測試腳本

爲配合測試利用python編寫測試腳原本將CPU跑滿centos

#!/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使用率限制腳本bash

3.2 運行腳本

腳本自己自己只使用了一個核心,跑了兩個測試腳本,將CPU跑到100%
Linux系統進程CPU使用率限制腳本服務器

3.3 查看進程

查看已經有兩個cpulimt進對測試程序進行了CPU使用率限制
Linux系統進程CPU使用率限制腳本多線程

3.4 查看日誌

記錄下了cpulimit限制時刻的日誌
Linux系統進程CPU使用率限制腳本運維

3.5 查看CPU利用率

查看cpu利用率已經限制到了85%
Linux系統進程CPU使用率限制腳本dom

相關文章
相關標籤/搜索