mirror of https://github.com/fengyuhetao/shell.git
54 lines
1.2 KiB
Bash
54 lines
1.2 KiB
Bash
|
#!/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
|