进程内存监控

Posted Stay Hungry , Stay Foolish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程内存监控相关的知识,希望对你有一定的参考价值。

使用脚本监控指定进程内存占用,当进程占用内存超过设置阈值时,生成对应的coredump文件以及使用gdb命令输出进程的全部线程信息,从而保存进程在系统kill前进程信息,方便后续对内存急剧上涨的调试。

#!/bin/bash
#usage: nohup ./memcheck.sh > /dev/null 2>&1 &
#set -x
PROC_NAME="memchk_test"   #进程名称
OUTPUT_PATH="/home/zhoulee/" #输出文件路径
let MEMORY_LIMIT=500000  #内存使用上限 单位:KB
let MONITOR_INTERVAL=5   #监控时间间隔 单位:Sec

while (true)
do
    PID=`ps aux | grep ${PROC_NAME} | grep -v grep | head -n 1 | awk {print $2}`
    if [ ! ${PID} ]; then
        echo "process ${PROC_NAME} not found"
    elif [ ${PID} -gt 0 ]; then
        MEM_USE=`cat /proc/${PID}/status | grep VmRSS | awk {print $2}`
        if [ ${MEM_USE} -gt ${MEMORY_LIMIT} ]; then
            echo "memory high, save process info...."
            TIME_SUFFIX=`date +%Y%m%d-%H%M%S`
            CORE_FILE=${OUTPUT_PATH}${PROC_NAME}"_"${TIME_SUFFIX}"_"${PID}".coredump"
            GDB_FILE=${OUTPUT_PATH}${PROC_NAME}"_"${TIME_SUFFIX}"_"${PID}"_gdb.info"
            gdb -ex "thread apply all bt" -batch -p ${PID} > ${GDB_FILE}
            gcore -o ${CORE_FILE} ${PID}
            break;
        else
            echo "memory ${MEM_USE} KB"
        fi
    fi
    sleep ${MONITOR_INTERVAL}
done

使用方式

nohup ./memcheck.sh > /dev/null 2>&1 &

以上是关于进程内存监控的主要内容,如果未能解决你的问题,请参考以下文章

进程内存监控

zabbix监控进程的CPU和内存占用量,进程数量

Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口

zabbix自动发现与监控内存和CPU使用率最高的进程

监控自身进程的内存使用情况

如何在运行时监控进程的资源使用情况(时间、内存)?