回答:
これは必要なことをするはずです。から情報を取得し/proc/$PID/statm
て印刷します(からman procfs
):
size total program size
(same as VmSize in /proc/[pid]/status)
resident resident set size
(same as VmRSS in /proc/[pid]/status)
share shared pages (from shared mappings)
data data + stack
スクリプト:
#!/usr/bin/env bash
## Print header
echo -e "Size\tResid.\tShared\tData\t%"
while [ 1 ]; do
## Get the PID of the process name given as argument 1
pidno=`pgrep $1`
## If the process is running, print the memory usage
if [ -e /proc/$pidno/statm ]; then
## Get the memory info
m=`awk '{OFS="\t";print $1,$2,$3,$6}' /proc/$pidno/statm`
## Get the memory percentage
perc=`top -bd .10 -p $pidno -n 1 | grep $pidno | gawk '{print \$10}'`
## print the results
echo -e "$m\t$perc";
## If the process is not running
else
echo "$1 is not running";
fi
done
次に、スクリプトを呼び出して、入力としてプロセス名を指定できます。例えば:
$ memusage.sh firefox
Size Resid. Shared Data %
517193 261902 9546 400715 12.8
517193 261902 9546 400715 12.8
517193 261902 9546 400715 12.8
517193 262100 9546 400715 12.8
517193 262100 9546 400715 12.8
517193 262100 9546 400715 12.8
517209 261899 9546 400731 12.8
517209 261899 9546 400731 12.8
ノート:
man
そこに間違っていました、あなたの編集が拒否された理由がわかりません。
数年後、私はvalgrindにもこのためのツールがあることを発見しました。
# record memory usage
$ valgrind --tool=massif bash -c "sleep 5; echo hey";
==5281== Massif, a heap profiler
==5281== Copyright (C) 2003-2015, and GNU GPL'd, by Nicholas Nethercote
==5281== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
==5281== Command: bash -c sleep\ 5;\ echo\ hey
==5281==
hey
==5281==
# print the usage (5281 was the pid of bash, your filename will be different)
$ ms_print massif.out.4682
注:valgrindは、観察するだけではありません。コードを挿入し、メモリのスナップショットを取得する必要があります。これは統計の精度を損なう可能性があります。
/proc/$PID/statm
)、100ミリ秒間スリープしてから繰り返す必要があるようです。なぜ、あなただけのPIDのは、関連付けられて投げ続けることはできませんstatm
を通じてcat
、多分余分な/不要な値オフフィルターにいくつかの正規表現を使用して、ただやりますかsleep 0.01
?一部のオペレーティングシステムではsleep
、1秒未満の値が許可されないため、その場合はPythonルートを使用する必要があります(time
代わりに、Pythonの組み込みライブラリを使用してスリープします)。