进程内存监控

使用脚本监控指定进程内存占用,当进程占用内存超过设置阈值时,生成对应的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 &
时间: 2024-09-29 08:52:25

进程内存监控的相关文章

c++ 对特定进程的内存监控

在工具实现的过程中,遇到了内存爆了的问题,部分模型的规模可以达到10的100次方方甚至1000次方.(工具的主要算法涉及到了递归,递归深度会很深,所以也用到了ulimit修改栈空间来缓解爆栈的问题,治标不治本.)有一个循环,这个循环迭代16次,但是可能程序在某一次迭代过程中,已经耗光了内存,再申请空间的时候,出现异常,导致将整个进程杀死.而我的想法是,当某一个迭代过程中,出现无法再申请内存的情况,就输出内存申请失败的提示信息,并跳过它,进行下一次的迭代,而不是将整个进程kill. 解决方法:创建

一个由进程内存布局异常引起的问题

一个由进程内存布局异常引起的问题 前段时间业务反映某类服务器上更新了 bash 之后,ssh 连上去偶发登陆失败,客户端吐出错误信息如下所示:图 - 0 该版本 bash 为部门这边所定制,但实现上并没有改动原有逻辑,只是加入了些监控功能,那么这些错误从哪里来呢? 是 bash 的锅吗 从上面的错误信息可以猜测,异常是 bash 在启动过程中分配内存失败所导致,看起来像是某些情况下该进程错误地进行了大量内存分配,最后导致内存不足,要确认这个事情比较简单,动态内存分配到系统调用这一层上主要就两种方

Linux内存监控与调优

首先,内存在被使用是被分为区域的 32位系统:zone_DMA ·zone_NORMAL (正常内存区域 16M) ·zone_RESRVED(用于高地址内存空间 896M) ·zone_HIGHMEM(高地址内存空间 ) 64位系统: ·zone_DMA(16G) ·zone_DMA32(4G) ·zone_normal(大于4G) 内存大页 : HugePage:大页面,在rhel 6 x64位系统上不但支持大页面而且支持使用透明大页 THP:透明大页,简单来讲就是对匿名内存的使用,不需要用

linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值

引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES).共享内存(SHR). 最近遇到一个咨询问题,某产品做性能分析需要获取进程占用物理内存的实际大小(不包括和其他进程共享的部分),看似很简单的问题,但经过研究分析后,发现背后有很多故事-- 1 VIRT RES SHR的准确含义 三个内存指标,VRIT,RES,SHR准确含义是什么?谁能告诉我们?MAN

iOS微信内存监控

WeTest 导读 目前iOS主流的内存监控工具是Instruments的Allocations,但只能用于开发阶段.本文介绍如何实现离线化的内存监控工具,用于App上线后发现内存问题. FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样.Facebook早在2015年8月提出FOOM检测办法,大致原理是排除各种情况后,剩余的情况是FOOM,具体链接:https://code.facebook.com/pos

Linux进程内存统计

一. 进程内存统计 cat /proc/[pid]/status通过/proc/[pid]/status可以查看进程的内存使用情况,包括虚拟内存大小(VmSize),物理内存大小(VmRSS),数据段大小(VmData),栈的大小(VmStk),代码段的大小(VmExe),共享库的代码段大小(VmLib)等等. Name: java /进程的程序名/ State: S (sleeping) /进程的状态信息,具体参见/ Tgid: 9744 /线程组号/ Pid: 9744 /进程pid/ PP

Linux 内存监控

init进程是系统中的第一个进程,PID永远为1 查看系统在中静态进程的统计信息 命令: ps 格式: ps [可选项] ax: 显示所有的进程信息 -u: 使用以用户为主的格式输出进程信息 -e: select all processes 显示系统内的进程信息 -l: 使用长格式显示进程信息 -f: full 使用完整的格式显示进程信息 ps aux命令 [[email protected] tmp]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT ST

Linux内存点滴:用户进程内存空间

原文出处:PerfGeeks 经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的.VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swapped size (kb)CODE, Code size (kb)DATA, Data+Stack size (kb)nFLT, Page Fault countn

查看进程内存情况

? 1 cat /proc/$(pgrep helloworld)/status | grep Vm 查看进程内存情况,布布扣,bubuko.com