Linux下实现脚本监测特定进程占用内存情况

Posted 清明-心若淡定

tags:

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

Linux系统下,我们可以利用以下命令来获取特定进程的运行情况: 

cat /proc/$PID/status

其中PID是具体的进程号,这个命令打印出/proc/特定进程/status文件的内容,信息比较多,包含了物理内存/虚拟内存的使用状况,监控进程是否有内存泄露的问题,一般查看进程占用物理内存的情况:

VmRSS: xxxkB

可以采用grep命令过滤出我们需要的信息:

cat /proc/$PID/status | grep RSS >> "$LOG" #过滤包含RSS的行,并且重定向到参数LOG表示的文件

由于PID号需要通过进程名获取,同样使用grep命令过滤出我们指定进程的进程号:

ps | grep $PROCESS | grep -v ‘grep‘ | awk ‘{print $1;}‘#$PROCESS表示进程名字

  

再设置一个循环,每十秒获取一次信息并写入指定文件,完整的脚本如下:

#!/bin/bash

PROCESS=进程名
LOG="/mnt/memlog.txt"

sleep 10

#删除上次的监控文件
if [ -f "$LOG" ];then 
    rm "$LOG"
fi

#过滤出需要的进程ID
PID=$(ps | grep $PROCESS | grep -v ‘grep‘ | awk ‘{print $1;}‘)

while [ "$PID" != "" ]    
do
    cat /proc/$PID/status | grep RSS >> "$LOG"#过滤出VmRSS行
    sleep 5
    PID=$(ps | grep $PROCESS | grep -v ‘grep‘ | awk ‘{print $1;}‘)
done

 

范例2

shell脚本

#!/bin/bash
pid=$1  #获取进程pid
echo $pid
interval=1  #设置采集间隔
while true
do
    echo $(date +"%y-%m-%d %H:%M:%S") >> proc_memlog.txt
    cat  /proc/$pid/status|grep -e VmRSS >> proc_memlog.txt    #获取内存占用
    cpu=`top -n 1 -p $pid|tail -2|head -1|awk ‘{ssd=NF-4} {print $ssd}‘`    #获取cpu占用
    echo "Cpu: " $cpu >> proc_memlog.txt
    echo $blank >> proc_memlog.txt
    sleep $interval
done

  

调用方式

$ sh shellName.sh [pid]
#exp:
sh monitor.sh 1234

  

  

 

以上是关于Linux下实现脚本监测特定进程占用内存情况的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程监测和操控之toppskillnicerenice命令

Linux查看占用swap的进程脚本

Linux下如何查看哪个进程占用内存多?

linux 下怎么查看一个进程占用内存大小

linux如何查看内存被哪些进程占用

如何查看 进程内存使用情况 linux