memória privada calculada por pmap, uma combinação de tamanho de memória virtual e tamanho de memória residente?

2

Você pode usar o comando ps para obter o tamanho da memória virtual e o tamanho da memória residente de um processo:

$ ps aux | grep apache2
USER       PID  %CPU %MEM  VSZ  RSS     TTY   STAT START    TIME    COMMAND
www-data 31141  0.0  0.3 163864 24008 ?        S    16:15   0:01 /usr/sbin/apache2 -k start

Agora, a memória virtual e a memória residente não fornecem uma precisão precisa do tamanho real da memória de um processo, porque também influencia nas bibliotecas compartilhadas.

Portanto, uma solução melhor é usar o pmap para obter o uso real de memória de um processo. Então, aqui está a saída do pmap usando o mesmo processo acima:

$ sudo pmap -d 31141
31141:   /usr/sbin/apache2 -k start
Address           Kbytes Mode  Offset           Device    Mapping
00007f85bbb82000      28 r-x-- 0000000000000000 0fc:00000 libnss_dns-2.15.so
...
...
mapped: 163864K    writeable/private: 28420K    shared: 592K

Portanto, o valor "writable / private" é a memória privada do processo, que é quase 28 mb. Minha pergunta: Essa memória privada é apenas a memória principal (RAM) ou esse número também inclui espaço de troca possivelmente?

    
por JohnMerlino 12.07.2013 / 23:36

1 resposta

1

Encontrei este post intitulado: Compreendendo o uso da memória no Linux o que eu acho que faz um trabalho melhor do que o que encontrei anteriormente no site linuxquestions.org, intitulado: Como medir com precisão o uso da memória? .

trecho da Compreendendo a memória ... postar

saída de ps
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dbunker   3468  0.0  2.7  25400 14452 ?        S    20:19   0:00 kdeinit: kedit
saída pmap
Address   Kbytes Mode  Offset           Device    Mapping
08048000      40 r-x-- 0000000000000000 0fe:00000 kdeinit
08052000       4 rw--- 0000000000009000 0fe:00000 kdeinit
08053000    1164 rw--- 0000000008053000 000:00000   [ anon ]
40000000      84 r-x-- 0000000000000000 0fe:00000 ld-2.3.5.so
40015000       8 rw--- 0000000000014000 0fe:00000 ld-2.3.5.so
40017000       4 rw--- 0000000040017000 000:00000   [ anon ]
... (trimmed) ...
mapped: 25404K    writeable/private: 2432K    shared: 0K
descrição do que está acontecendo

If you go through the output, you will find that the lines with the largest Kbytes number are usually the code segments of the included shared libraries (the ones that start with "lib" are the shared libraries). What is great about that is that they are the ones that can be shared between processes. If you factor out all of the parts that are shared between processes, you end up with the "writeable/private" total, which is shown at the bottom of the output. This is what can be considered the incremental cost of this process, factoring out the shared libraries. Therefore, the cost to run this instance of KEdit (assuming that all of the shared libraries were already loaded) is around 2 megabytes. That is quite a different story from the 14 or 25 megabytes that ps reported.

Quanto swap o processo X está usando?

Você pode descobrir o espaço de troca de um processo que está usando com este comando:

$ grep VmSwap /proc/$(pidof chrome | awk '{print $1}')/status
VmSwap:     1324 kB

O texto acima está recebendo o primeiro PID de chrome retornando o valor VmSwap para ele.

memstat

Você pode querer verificar essa ferramenta em vez disso, se estiver procurando por medidas precisas de memória, ela será chamada memstat :

Existe um tutorial sobre cyberciti.biz intitulado: Linux : Descobrir o que está usando acima de toda a memória virtual que mostra memstat em ação.

Referências

por 13.07.2013 / 00:02