주소 공간에서 프로세스의 힙 크기를 계산하는 방법은 무엇입니까?

주소 공간에서 프로세스의 힙 크기를 계산하는 방법은 무엇입니까?

내 프로세스에서 사용하는 힙 크기를 찾으려고 합니다. 내가 해냈어

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$pidawk-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 프로세스의 메모리를 파일로 덤프

관련 정보