Resultados pmap impossíveis

3

O Nautilus está ocupando 450 MiB de acordo com o System Monitor (Ubuntu 10.04).

$pmap <PID of Nautilus>
...
total          1578276K

pmap está reportando 1,5 GiB de memória aqui? Estou tentando descobrir o que está tomando o 450 MiB para que eu possa deduzir o que estou fazendo de errado ou onde está o problema.

    
por propaganda 15.01.2012 / 14:32

1 resposta

3

Não há noção simples de quanta memória é usada por um programa.

A saída de pmap descreve toda a memória virtual mapeada por um processo. Mapeado significa que o processo pode acessar esses dados por meio de um ponteiro, sem emitir nenhum comando adicional para carregar dados ou solicitar acesso. A memória virtual mapeada nem sempre está na RAM: ela pode ser trocada e pode estar em um arquivo. Por exemplo, todas as bibliotecas compartilhadas usadas por um programa são mapeadas em cada processo que as utiliza, mas (na maioria das vezes) apenas uma cópia é mantida na RAM para todo o sistema, e essa cópia não precisa ser totalmente carregada no sistema. memória (as peças necessárias serão carregadas do arquivo do disco quando necessário). A figura de 1,5 GB inclui todo o código do processo, dados estáticos, memória compartilhada e dados próprios. Não é uma figura muito significativa.

pmap é uma reformatação simples de /proc/$pid/maps . Noções básicas sobre Linux / proc / id / maps explica o que as colunas significam.

A figura de 450 MB é (eu acho) o conjunto residente do processo, ou seja, a memória não compartilhada que está atualmente na RAM. Isso inclui os dados que pertencem apenas ao processo (e que podem ser trocados) e os arquivos que o processo abriu para gravação (buffers de disco, que podem ser despejados para serem recarregados posteriormente a partir do arquivo).

Você não conseguirá dividir facilmente a memória de 450 MB. Este é um trabalho para o autor do programa, com ferramentas de depuração.

    
por 15.01.2012 / 20:27