Diferença entre free -m e ps -euf

6

Eu não sou especialista em Linux, então peço desculpas antecipadamente pela pergunta boba. Eu tenho uma máquina vps com 10,04 e 512Mb de RAM do Ubuntu. Estou tentando adivinhar quanta memória está disponível depois de executar o daemon mongodb.

Se eu executar free -m , obtenho

             total       used       free     shared    buffers     cached
Mem:           496        489          6          0          4        452
-/+ buffers/cache:         33        462
Swap:          511          4        507

Se eu executar ps euf , obtenho

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       948  0.0  0.0   5928   472 tty6     Ss+  Aug25   0:00 /sbin/getty 384
root       947  0.0  0.0   5928   472 tty5     Ss+  Aug25   0:00 /sbin/getty 384
root       946  0.0  0.0   5928   472 tty4     Ss+  Aug25   0:00 /sbin/getty 384
root       945  0.0  0.0   5928   472 tty3     Ss+  Aug25   0:00 /sbin/getty 384
root       944  0.0  0.0   5928   472 tty2     Ss+  Aug25   0:00 /sbin/getty 384
root       943  0.0  0.1  51856   536 hvc0     Ss   Aug25   0:00 /bin/login -- 
root       978  0.0  0.4  20580  2424 hvc0     S    Aug25   0:01  \_ -bash TERM=
root      7593  0.0  0.1  10332   524 hvc0     T    Aug25   0:00      \_ nano he
root     12576  0.7  3.1 122520 16220 hvc0     Sl   07:42   0:12      \_ ./mongo
root     12599  0.0  0.2  16300  1060 hvc0     R+   08:09   0:00      \_ ps euf

Portanto, parece que menos de 5% da memória é usada por processos, mas eu tenho apenas 6Mb de memória livre ... por quê?

    
por mamoo 27.08.2011 / 17:11

2 respostas

10

Os buffers e o cache são dimensionados dinamicamente. Se os processos precisarem de mais espaço, ele será obtido dos buffers e do cache.

A chave é olhar para a segunda linha ("- / + buffers / cache").

Mem:           496        489          6          0          4        452
-/+ buffers/cache:         33        462

Observe que o livre na segunda linha (462) é a soma de 6 (livre), 4 (buffers) e 452 (em cache). Esta é a quantidade real de espaço livre. Se isso ficar muito baixo, o sistema iniciaria a troca de processos sem memória para trocar espaço.

Então, na realidade, você está usando 33MB de memória e tem disponível 462MB - provavelmente um pouco menor, já que você ainda precisaria de alguns buffers para i / o.

    
por 27.08.2011 / 17:31
4

Além da explicação correta do Arcege , há também dois outros equívocos escondidos em sua interpretação de ps euf .

  1. O comando ps euf não lista todos os processos - você deve usar ps axeuf para isso.

  2. As porcentagens de memória usada para cada processo são fornecidas, como você pode ver, arredondadas para 0.1% . Portanto, adicioná-los resultará erroneamente - (aproximadamente) todos os processos usam alguma memória - mesmo que seja menor que 0.1% . Se houver, por exemplo, 20 processos que usam 0.05% , eles adicionarão até 1% , não 0% .

por 27.08.2011 / 23:43

Tags