내 프로세스에서 사용하는 힙 크기를 찾으려고 합니다. 내가 해냈어
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는 십진수가 아닌 정수를 인식할 수 있어야 합니다) :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 프로세스의 메모리를 파일로 덤프