一、情况简述:
由于某应用服务器存在内存持续升高的情况,情况复杂,种种原因导致无法解决,告警不断,又逢假期,不想一直告警和手动处理。
思路为: 内存清理+ tomcat 重启 + 清理某进程
二、相关脚本及定时任务
1、根据内存大小决定是否重启tomcat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/bin/bash
LOGFILE=/home/tom/test/initsh/Reload.log MEMUSAGE=`free | awk 'NR==2{printf "%d\n", $3*100/$2 }'` #FREECNTL= 60
export JAVA_HOME=/usr/local/jdk1.8.0_ggg
if [ $MEMUSAGE -gt 73 ]; then echo "内存使用率超过80%" >$LOGFILE free -lh >>$LOGFILE ps -ef | grep tomcat | grep -v grep >> $LOGFILE ps -ef | grep tomcat | grep -v grep|awk '{print $2}' >>$LOGFILE ps -ef | grep tomcat | grep -v grep|awk '{print $2}' |xargs kill -9 echo "----------停止进程----------" >>$LOGFILE date +%Y-%m-%d_%H:%M:%S >> $LOGFILE sh /home/tom/test/tomache-tomcat-9.gg.gg/bin/startup.sh >> $LOGFILE echo "----------启动进程----------" >> $LOGFILE date +%Y-%m-%d_%H:%M:%S >> $LOGFILE free -lh >> $LOGFILE else date +%Y-%m-%d_%H:%M:%S >> $LOGFILE echo "内存使用率未超过80%" >>$LOGFILE echo "-------内存占比为: `free | awk 'NR==2{printf "%d\n", $3*100/$2 }'` ------">>$LOGFILE fi
|
1 2 3 4
| */10 * * * * sh /home/tom/test/initsh/ReloadTm.sh > /home/tom/test/initsh/crontab.log 每十分钟定时任务 用于特殊情况 */30 17-23,0-8 * * 1-5 sh /home/tom/test/initsh/ReloadTm.sh > /home/tom/test/initsh/crontab.log 每三十分钟 非工作时间
|
2、内存清理
1 2
| 10 * * * * sync && echo 3 > /proc/sys/vm/drop_caches 每十分钟释放一次
|
3、清理某进程 (该进程自动拉起)
1 2
| ps -ef | grep KgEggSgg | grep -v grep|awk '{print $2}'|xargs kill -9 ps -ef |grep KgEggSgg | grep -v grep
|