Linux下监控进程内存占用(如果超过大小则重启应用)并保活的脚本

###直接上脚本吧```bash#!/bin/shTOTAL_MEM=$(cat /proc/meminfo | grep -e MemTotal|awk '{print $2}')#获取机器内存大小(单位KB)MAX_MEM=$[TOTAL_MEM/2]#定义进程运行内存不可超过机器内存的1/2,否则杀死重启(根据你的实际情况,可能需要修改)while true;do timeStamp=$(date -d today +%Y-%m-%d_%H:%M:%S)#日志时间戳 count=`ps -ef|grep application-name.jar|grep -v grep`#获取包含指定字符(一般是程序的文件名)进程的个数 if [ "$?" != "0" ];then#如果该jar程序的进程数等于0 echo -e "$timeStamp >>>>no application process running, run it" >> log/run.log#记录日志 #启动应用进程命令(根据你的实际情况,需要修改) java -Xms512m -Xmx1536m -jar application-name.jar --spring.profiles.active=prod 5 & else #获取jar应用进程的进程号 #(此处以jar程序为例,而且我的程序的进程号可以用jar关键字查到 #,所以用了jps命令,其他【脚本或者其他应用】请修改获取进程号的命令,一般用ps命令) pid=$(jps | grep jar|awk '{print $1}') memValue=$(cat /proc/$pid/status| grep -e VmRSS|awk '{print $2}')#获取该进程的内存占用(单位KB) if [ $memValue -ge $MAX_MEM ];then#如果该进程内存占用大于限制 ##记录内存超过限制的日志 echo -e "$timeStamp MEM warning:$memValue > $MAX_MEM, kill application!" >> log/run.log ./bin.sh stop#应用重启命令(根据你的实际情况,需要修改) else echo -e "$timeStamp >>>>Application is running...PID:$pid,MEM:$memValue------LIMIT:$MAX_MEM------MemTotal:$TOTAL_MEM" >> log/run.log#记录正常运行的日志 fi fi sleep 5#每次检查间隔5秒done```就这么多,需要的拿走~弱弱的说一句:如果有帮到你,给个赞赏吧,谢谢~

的markdown解析器有问题吗?为什么编辑和显示差别那么大?????


你可能感兴趣的:(Linux下监控进程内存占用(如果超过大小则重启应用)并保活的脚本)