|
由于近来线上环境的某些进程总是内存溢出,所以需要添加一下对于某些进程的内存使用情况监控,搜到的别人的脚本大都不太满意,于是自己写了个,代码如下:
#!/bin/bash
HELP(){
echo " Usage: $0 -p /var/run/pidfile -w used% -c used%"
echo " Exam: $0 -p /var/run/pidfile -w 85 -c 90"
exit 3
}
OK=0 ; WA=1 ; CR=2 ;UN=3 ; WAR=$4 ; CRI=$6 ; MI=${7:-0.9} ; MX=${8:-0.8}
#MX:性能数据的CRITICAL线,计算方式为内存总量乘以MX值,此处为0.9等于 当前系统总内存 * 0.9,取结果整数部分
#MI:性能数据的WARNING线,计算方式为内存总量乘以MX值,此处为0.8等于 当前系统总内存 * 0.8,取结果整数部分
DATE="date +%Y-%m-%d~%k:%M:%S" ; NUL=/dev/null
TAG=$1 ; [ "$TAG" != "-p" ] && HELP
PID=$2
[ ! -f "$PID" ] && echo "`$DATE` Error: $PID not exist." && HELP
if ! ps aux|grep "\<`cat $PID`\>"|grep -v grep &>$NUL;then
echo "`$DATE` Error: `cat $PID` not exist."
HELP
else
TOTAL=`/usr/bin/free -m|grep Mem|awk '{print $2}'`
MIN=`echo "$TOTAL * $MI"|/usr/bin/bc|awk -F. '{print $1}'`
MAX=`echo "$TOTAL * $MX"|/usr/bin/bc|awk -F. '{print $1}'`
OSM=`/usr/bin/free -m|grep "\<cache\>"|awk '{print $NF}'`
ID=`cat $PID`
BMEM=`/usr/bin/top -bn 1|grep "\<$ID\>"|awk '{print $10}'`
declare -u MMEM=`/usr/bin/top -bn 1|grep "\<$ID\>"|awk '{print $6}'`
RES=`echo "$BMEM > $CRI"|/usr/bin/bc`
if [ "$RES" -eq 1 ];then
echo "CRITICAL - PID:$ID Memory usage = $BMEM% ["$MMEM"B]. OS free memory="$OSM"MB|Used="$MMEM"B;"$MIN"MB;"$MAX"MB;0;"$TOTAL"MB"
exit $CR
fi
RES=`echo "$BMEM > $WAR"|/usr/bin/bc`
if [ "$RES" -eq 1 ];then
echo "WARNING - PID:$ID Memory usage = $BMEM% ["$MMEM"B]. OS free memory="$OSM"MB|Used="$MMEM"B;"$MIN"MB;"$MAX"MB;0;10877MB"
exit $WA
else
echo "OK - PID:$ID Memory usage = $BMEM% ["$MMEM"B]. OS free memory="$OSM"MB|Used="$MMEM"B;"$MIN"MB;"$MAX"MB;0;10877MB"
exit $OK
fi
fi
HELP
##########
##########
##能不能吐槽一下这个代码编辑器???
##########
##########
测试使用如下:
./check_mem_pid.sh -p /var/run/hadoop/hdfs/hadoop-hdfs-namenode.pid -w 80 -c 90
OK - PID:5534 Memory usage = 6.6% [720MB]. OS free memory=9179MB|Used=720MB;9789MB;8701MB;0;10877MB
# -w 指内存使用的warning比例,-c为critical,其大小均为top -bn 1取出的指定pid的第10列字段
不足之处,欢迎指正...
|
|