linux-tutorial/codes/linux/tool/Cpu_Limit.sh

55 lines
1.2 KiB
Bash
Raw Normal View History

2019-10-29 18:22:19 +08:00
#!/usr/bin/env bash
2019-10-10 08:56:31 +08:00
2019-05-10 11:17:57 +08:00
# 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
2019-10-10 08:56:31 +08:00
PIDARG=$(ps -aux | awk -v CPU=${PEC_CPU} '{if($3 > CPU) print $2}')
2019-05-10 11:17:57 +08:00
CPULIMITCMD=$(which cpulimit)
install_cpulimit() {
2019-10-29 18:22:19 +08:00
[ ! -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/
2019-05-10 11:17:57 +08:00
}
do_cpulimit() {
2019-10-29 18:22:19 +08:00
[ ! -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
2019-05-10 11:17:57 +08:00
}
main() {
2019-10-29 18:22:19 +08:00
hash cpulimit
if [ $? -eq 0 ]; then
do_cpulimit
else
install_cpulimit && do_cpulimit
fi
2019-05-10 11:17:57 +08:00
}
main