Como saber a memória compartilhada entre dois processos?

3

Eu preciso saber a quantidade de memória compartilhada entre dois processos, ou seja, a interseção de suas memórias compartilhadas.

Alguma ideia? Obrigado!

    
por idelvall 16.11.2016 / 12:49

1 resposta

3

Você pode consultar /proc/<pid>/maps, /proc/<pid>/smaps (ou pmap -x <pid> se o seu SO suportar) IDs de processos interessados e comparar saídas para determinar regiões de memória compartilhada. Isso inclui segmentos de memória compartilhada por meio de chamadas shmget, bem como quaisquer bibliotecas compartilhadas, arquivos.

Editar: Como mr.spuratic apontou sua resposta aqui tem mais detalhes no lado do kernel

Você pode olhar para um processo RSS usando ps, mas não leva em consideração todas as páginas compartilhadas. Para ver o RSS para um processo específico, veja abaixo

cv@thunder:~$ ps -o rss,pid,comm -p $$,7023
  RSS   PID COMMAND
22060  7023 xfwm4
 6876 18094 bash
A ferramenta

smem fornece informações mais detalhadas, levando em consideração as páginas compartilhadas. Veja abaixo a saída para o mesmo processo acima

cv@thunder:~$ smem -t |egrep "RSS|$$|7023"
  PID User     Command                         Swap      USS      PSS      RSS 
 9852 cv       grep -E RSS|18094|7023             0      340      367     2220 
18094 cv       bash                               0     3472     4043     6876 
 7023 cv       xfwm4 --display :0.0 --sm-c        0     5176     7027    22192 

De man smem :

   smem  reports  physical  memory usage, taking shared memory pages into account.  Unshared memory is reported as the USS (Unique Set Size).  Shared
   memory is divided evenly among the processes sharing that memory.  The unshared memory (USS) plus a  process's  proportion  of  shared  memory  is
   reported  as  the  PSS  (Proportional  Set  Size).   The USS and PSS only include physical memory usage.  They do not include memory that has been
   swapped out to disk.
    
por 16.11.2016 / 16:59