私のプロセスで使用するヒープサイズを見つけようとしています。私がやった
fgrep '[stack]' /proc/pid/maps
そして得た
00a00000-45937000 rw-p 00000000 00:00 0 [heap]
今ヒープのサイズを計算したいと思います。だから私はそうでした。
(45937000 - 00a00000 ) = 44F37000
10進数に変換してください1156804608
。次にGB = 1156804608/(1000*1000*1000) = 1.1568 GB
。
私が正しいことをしているのでしょうか?
答え1
はい、終了境界アドレスから開始境界アドレスを減算すると、その特定のプロセスのヒープサイズがわかります。
シェルで計算を実行できます。
hsize=$(( 0x45937000 - 0x00a00000 + 1 ))
printf 'heap is %d bytes (about %d MiB)\n' \
"$hsize" "$(( hsize / 1024 / 1024 ))"
GNUを使用してPID "ファイル"をawk
解析します(GNUは10進数ではなく整数を認識できる必要があります):maps
$pid
awk
-n
awk -n -F '[- ]' '/\[heap\]/ {
h = "0x" $2 - "0x" $1 + 1
printf("heap is %d bytes (%.2f MiB)\n", h, h/1024/1024) }' /proc/$pid/maps
この関連質問も参照してください。Linuxで/proc/$pid/memを読む方法は?
ServerFaultに関するこの質問は、実行したい操作に応じて役に立ちます。Linuxプロセスのメモリをファイルにダンプする