博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux系统进程CPU使用率限制脚本
阅读量:6622 次
发布时间:2019-06-25

本文共 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

三、测试

3.1 测试脚本

为配合测试利用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

制作定时任务

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

你可能感兴趣的文章
防火墙基础(一)
查看>>
Windows环境安装PEAR、PHPUnit
查看>>
利用Python监测MySQL主从状态
查看>>
Spring Boot日志配置 (二)
查看>>
Linux系统值得一看的学习方法及路线图
查看>>
《Linux就该这么学》双十一半价发售
查看>>
(16)-华为交换机端口镜像配置
查看>>
Kubuntu 18.10 开发重点迁移至ARM与X64平台
查看>>
DDR内存参数笔记
查看>>
static_cast, dynamic_cast和reinterpret_cast的区别
查看>>
第六章:thymeleaf页面模版-3. 处理内置对象
查看>>
鼠标移动可改变DIV的大小
查看>>
为什么你需要将代码迁移到ASP.NET Core 2.0?
查看>>
第二周实习小记-----大牛离我们有多远
查看>>
SpringMVC通过@autowired自动装载Service时提示装载错误
查看>>
ajax与spring mvc请求的总结
查看>>
百度API
查看>>
指南:在Github和Git上如何Fork
查看>>
i3 窗口管理器使 Linux 更美好
查看>>
动画_Interpolator(插值器)
查看>>