进程内存占用监控脚本
2013-04-26 21:29
441 查看
最近做系统维护的时候,发现系统里面总有那么几个进程的内存占用量不断的在往上涨,直接导致整个系统崩溃。因为该服务器上同时还运行着其他几个服务进程,为了不让其受到影响,就写了个shell脚本,发现有进程的内存占用率达到上限时,就将其杀死。
该脚本可以既可以根据指定的进程号进行监控,也可以根据正则表达式指定进程名进行监控。
具体代码如下:
该脚本可以既可以根据指定的进程号进行监控,也可以根据正则表达式指定进程名进行监控。
具体代码如下:
#! /bin/bash PNAME= PID= MEM= SEC=1 USAGE="$(basename $0) -[n 进程名] -[p 进程ID] -[s 监视间隔时间(单位:秒)] -[m 内存占用上限(单位:字节,可以通过k,m,g,K,M,G,%指定单位)]" while getopts n:p:s:m: OPT do case $OPT in n)PNAME=$OPTARG ;; p)PID=$OPTARG ;; s)SEC=$OPTARG ;; m)MEM=$OPTARG ;; \?) echo $USAGE >&2;exit 1 ;; esac done echo $MEM|grep ^[0-9,.]*[0-9,k,m,g,K,M,G,%]$ >/dev/null if [ $? -gt 0 ];then echo "$MEM词法错误" >&2 echo $USAGE >&2 exit 1 fi MEM=$(echo $MEM|tr "[A-Z]" "[a-z]") len=${#MEM} unit=$(echo $MEM|cut -c $len) case $unit in k) MEM=$(echo $MEM|cut -c 1-$[len-1]) MEM=$[MEM*1024] ;; m) MEM=$(echo $MEM|cut -c 1-$[len-1]) MEM=$[MEM*1024*1024] ;; g) MEM=$(echo $MEM|cut -c 1-$[len-1]) MEM=$[MEM*1024*1024*1024] ;; %) MEM=$(echo $MEM|cut -c 1-$[len-1]) ;; \?) ;; esac while true;do date if [ -n "$PID" ];then ents=$(ps -e -o pid= -o vsz= -o pmem= -o pcpu= -o comm=|grep ^$PID) elif [ -n "$PNAME" ];then ents=$(ps -e -o pid= -o vsz= -o pmem= -o pcpu= -o comm=|grep $PNAME$) else echo "指定进程检索条件">&2 echo $USAGE >&2 exit 1 fi if [ -z "$ents" ];then echo "没有符合检索条件的进程" exit 0 fi fields=($ents) echo "符合检索条件的进程信息:" echo "【PID】 【VSZ(单位:k)】 【PMEM】 【PCPU】 【COMM】" for ((i=0; i<${#fields[@]};i++)) do printf " ${fields[$i]} " if [ $[ i%5 ] -eq 4 ];then printf \\n fi done #按照内存的占用率进行监控 if [ $unit == "%" ];then pos=2 pmem=${fields[$pos]} while [ -n "$pmem" ];do echo "$pmem $MEM"|awk '($1>=$2){exit 1}' if [ $? -eq 1 ];then pid=${fields[$[pos-2]]} comm=${fields[$[pos+2]]} echo "杀死$pid:$comm进程【内存占用率$pmem>=$MEM】" kill -9 $pid fi pos=$[pos+5] pmem=${fields[$pos]} done else #按照内存的占用量进行监控 pos=1 vsz=${fields[$pos]} while [ -n "$vsz" ];do vsz=$[vsz*1024] if [ $vsz -ge $MEM ];then pid=${fields[$[pos-1]]} comm=${fields[$[pos+3]]} echo "杀死$pid:$comm进程的【内存占用数量$vsz>=$MEM】" kill -9 $pid fi pos=$[pos+5] vsz=${fields[$pos]} done fi echo "" if [ $SEC -gt 0 ];then sleep $SEC else exit 0 fi done
相关文章推荐
- zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数
- 【Shell/Python】Linux 进程自动监控bash shell脚本 监控VPS服务器负载/CPU及内存占用 自动重启
- Linux 进程自动监控bash shell脚本 监控VPS服务器负载/CPU及内存占用 自动重启
- zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数
- 查看linux被隐藏进程的内存占用方法,可用于监控进程是否内存泄漏
- Linux下实现脚本监测特定进程占用内存情况
- 监控某进程内存占用异常
- linux脚本--输出占用内存最多的进程ID
- [置顶] Linux下实现脚本监测特定进程占用内存情况
- Linux下实现脚本监测特定进程占用内存情况
- Shell脚本查看进程内存真实占用情况
- zabbix自动发现结合shell实现自动发现占用内存最大top10进程并监控其资源
- zabbix监控进程的CPU和内存占用量,进程数量
- 查看进程内存真实占用情况的脚本
- shell脚本检测tomcat进程占用内存大小
- 常用shell(3):shell监控nginx所有进程cpu,内存占用
- 使用shell 脚本对 Linux 系统进程的CPU使用率与内存资源进行监控
- zabbix监控进程的CPU和内存占用量
- zabbix监控进程的CPU和内存占用量,进程数量
- zabbix自动发现结合shell实现自动发现占用内存最大top10进程并监控其资源 推荐