1.通过 shell 脚本监控 PID 的内存,cpu 使用情况
最近管理服务器,遇到很多问题。
服务器无故死机,为了查明具体原因,自己通过写脚本来监控内存,cpu 使用情况;
#!/bin/bash
while true
do
###开始获取内存信息###################################################
total=$(free -m | sed -n '2p' | awk '{print $2}')
used=$(free -m | sed -n '2p' | awk '{print $3}')
free=$(free -m | sed -n '2p' | awk '{print $4}')
shared=$(free -m | sed -n '2p' | awk '{print $5}')
buff=$(free -m | sed -n '2p' | awk '{print $6}')
cached=$(free -m | sed -n '2p' | awk '{print $7}')
echo "" >> memory_log_err.log
echo "" >> memory_log_err.log
starttime=$(date +%Y-%m-%d\ %H:%M:%S)=====***********=======**************=====memory===start=================
echo $starttime >> memory_log_err.log
rate=`echo "scale=2;$used/$total" | bc | awk -F. '{print $2}'`
echo -e "total\tused\tfree\tshared\tbuffer\tavailable" >> memory_log_err.log
echo -e "${total}M\t${used}M\t${free}M\t${shared}M\t${buff}M\t${cached}M\nrate:${rate}%" >> memory_log_err.log
####打印 memory 具体信息##################################################################
if [ $rate -gt 60 ]
then
# echo "内存有危险!!!!Memory Warn!!warn!!!!!!warn!!!!!!!!warning!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> memory_log_err.log
# ps aux | grep -v USER | sort -rn -k4 | head >> memory_log_err.log
echo "--------------cpu----linux下获取占用CPU资源最多的10个进程-----------------------------" >> memory_log_err.log
echo "USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND" >> memory_log_err.log
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head >> memory_log_err.log
echo "" >> memory_log_err.log
echo "--------------memory----linux下获取占用内存资源最多的10个进程--------------------------" >> memory_log_err.log
echo "USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND" >> memory_log_err.log
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head >> memory_log_err.log
echo "" >> memory_log_err.log
fi
###休眠时间判断######################################################
if [ $rate -lt 30 ]
then sleep 100
elif [ $rate -ge 30 ] && [ $rate -lt 60 ]
then sleep 60
elif [ $rate -ge 60 ] && [ $rate -lt 70 ]
then sleep 30
elif [ $rate -ge 70 ] && [ $rate -lt 80 ]
then sleep 5
elif [ $rate -ge 80 ] && [ $rate -lt 85 ]
then sleep 2
else
echo "内存有危险!!!!Memory Warn!!warn!!!!!!warn!!!!!!!!warning!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> memory_log_err.log
sleep 1
fi
done
注意 : (1)yum install bc (2) 启动脚本,后台运行,关闭窗口也会运行 sh **.sh &
(3) ps -ef | grep sh (4) kill -9 PID 关掉执行脚本