Como calcular o tamanho de heap do processo a partir do espaço de endereço?

2

Eu estava tentando encontrar o tamanho de heap que meu processo está usando. Eu fiz

fgrep '[stack]' /proc/pid/maps  e tenho

00a00000-45937000 rw-p 00000000 00:00 0 [heap]

Agora eu queria calcular o tamanho do heap. Então eu fiz

(45937000 - 00a00000 ) = 44F37000

converteu para decimal 1156804608 . Então para GB = 1156804608/(1000*1000*1000) = 1.1568 GB .

O que estou fazendo é correto?

    
por vanta mula 14.09.2017 / 02:58

1 resposta

1

Sim, tomar o endereço do limite final menos o endereço do limite inicial fornecerá o tamanho do heap nesse processo específico.

O cálculo pode ser realizado no shell com

hsize=$(( 0x45937000 - 0x00a00000 + 1 ))
printf 'heap is %d bytes (about %d MiB)\n' \
    "$hsize" "$(( hsize / 1024 / 1024 ))"

Com o GNU awk analisando o maps "arquivo" para PID $pid (o GNU awk precisa de -n para poder reconhecer inteiros não decimais):

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

Veja também esta questão relacionada: Como leio de / proc / $ pid / mem no Linux?

Esta questão no ServerFault também pode ser útil, dependendo do que você gostaria de fazer: Despeje a memória de um processo do Linux para arquivar

    
por 11.02.2018 / 10:53

Tags