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

制作定时任务

3.2 运行脚本

脚本本身本身只使用了一个核心,跑了两个测试脚本,将CPU跑到100%

3.3 查看进程

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

3.4 查看日志

记录下了cpulimit限制时刻的日志

3.5 查看CPU利用率

查看cpu利用率已经限制到了85%

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏日知录

跃迁:成为高手的技术

14220
来自专栏牛客网

分享经验热乎乎的秋招第一个产品offer去哪儿网

我是之前在校招投了去哪儿的产品经理,6号在宣讲会第一站点进行了线上笔试,当晚接到了通知第二天下午进行面试,精神抖擞,刷了一遍简历了解了一遍OTA就上阵了

15120
来自专栏IT开发技术与工作效率

服务设计

服务识别方法: 角色分析,场景梳理最小可用,用户服务,应用服务(横向按应用调用顺序,纵向按用户服务),系统能力分析,前置依赖优先后置依赖同版本

14020
来自专栏Java后端技术栈

程序员:天冷了,今天穿件衬衫上班!

不说了,小编已经感冒了,赶紧穿上我最爱的格子衬衫!降温了,大家千万要注意别感冒了。另外,别忘了穿上格子衬衫去上班吧!

23920
来自专栏凌帅的阅读思考与实践

加密货币必将成为世界货币称霸全球(二)

[第一篇文章](https://mp.weixin.qq.com/s/8-FskjZJFRJPd4oFl4BAww)中,凌帅分析了加密货币本身的先进性及作为全球...

17020
来自专栏Forrest随想录

我是一个什么风格的管理者?

昨天一口气看了好几篇刘建国老师,在极客时间《技术管理实战36讲》的文章,看地非常过瘾。

83230
来自专栏Modeng的专栏

思考:如何高效的说服别人

国庆期间去一个同学那里去玩耍,因为他是做服务行业的所以国庆没有放假,所以我就只能一边看他做生意,一边等他清闲了聊上两句。

9510
来自专栏本立2道生

电脑护眼设置:蓝色光波过滤

本人高度近视,因此平时使用电脑时总会关注如何护眼,安卓手机上使用了app “蓝色光波过滤”,感觉不错,就想看看PC上有没有相应的软件,找倒是找到了,不过需要先安...

12810
来自专栏轮子工厂

简历修改了100遍,却仍然没有找到满意的工作,你可能需要看一下这篇文章

最近恰逢秋招,身边很多朋友都跟我抱怨说,简历投出去了不少,可是很多都是石沉大海,没有了回音。于是就急的不行,纷纷跑过来请教简历制作大法。

12820
来自专栏一直在跳坑然后爬坑

行观点与列观点

8310

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励