Como medir a quantidade total de memória usada pelos processos do userspace no Linux?

4

Como medir a quantidade total de memória alocada para programas de espaço do usuário no Linux? Esse é o tamanho de todas as páginas de memória que os programas do userspace têm na memória real.

/proc/meminfo não parece fornecer essa informação.

Atualmente, estou adicionando rss campos de todos os processos de /proc/$pid/stat , mas isso não leva em conta as páginas de memória compartilhada.

Update: Por "user space" quero dizer processos executados por todos os usuários, incluindo root (em oposição ao espaço do kernel).

    
por el.pescado 30.03.2018 / 08:27

2 respostas

2

Usando smem para mostrar um total de toda a memória do usuário, sem troca e sem contar qualquer memória compartilhada duas vezes:

sudo smem -c pss -t | tail -1

Saída no meu sistema:

4119846

Desenrolando isso:

  • -c pss seleciona a coluna, neste caso PSS . 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.
    
    • -t mostra um total ou a soma de todos os PSS usados no final e tail -1 retira os dados anteriores.

Para mostrar apenas a memória total do usuário não compartilhada , substitua -c pss por -c uss :

sudo smem -c uss -t | tail -1

Saída:

 3874356 

Observe que o total de PSSs acima é mais ou menos o mesmo número mostrado em linha # 5, coluna # 2 aqui:

smem -w

Saída:

Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory       1367712    1115708     252004 
userspace memory            4112112     419884    3692228 
free memory                  570060     570060          0 
    
por 13.04.2018 / 15:10
0

Este é um one-liner que eu uso, mostra a você qual processo usa quanto Swap e o PID:

for file in /proc/*/status;
do
    awk '/VmSwap|Tgid|Name/ {printf "%s %s %s", $2, $3, $4} END { print "" }' "$file";
done | sort -k 3 -n -r | head -20

(Eu dividi-o aqui em várias linhas para facilitar a leitura. Você pode simplesmente juntar todas as linhas juntas se preferir como uma linha).

    
por 13.04.2018 / 11:47

Tags