1. 程式人生 > >Linux下實現指令碼監測特定程序佔用記憶體情況

Linux下實現指令碼監測特定程序佔用記憶體情況

記憶體洩露是C/C++程式設計師經常需要面對的問題,除了有效地經常查找出記憶體洩露的位置外,在嵌入式的開發中,還經常需要確定自己寫的程式是否存在記憶體洩露的情況

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