Por que 'top' indica baixo uso de memória, enquanto 'free' indica alto uso de memória?

4

Por que 'top' indica baixo uso de memória, enquanto 'free' indica alto uso de memória?

Mem:    262144k total,   225708k used,    36436k free,    47948k buffers
Swap:   262136k total,       40k used,   262096k free,   110704k cached

 PID  USER      PR   NI VIRT  RES  SHR  S %CPU %MEM  TIME+   COMMAND                         
 1652 root      15   0  79456 14m  1728 S 0.0  5.6   0:00.02 miniserv.pl                  
 3544 root      15   0  87920 3356 2584 R 0.0  1.3   0:00.01 sshd  
 3707 root      16   0  86704 3104 2416 S 0.0  1.2   0:00.00 sshd    
 3708 sshd      15   0  61864 1452 872  S 0.0  0.6   0:00.00 sshd          
 3548 root      16   0  10872 1432 1116 S 0.0  0.5   0:00.00 bash                      
 1908 root      15   0  10876 1392 1072 S 0.0  0.5   0:00.00 sh      
  918 root      15   0  60520 1204 664  S 0.0  0.5   0:00.07 sshd                        
 3624 root      15   0  12584 1180 920  R 0.0  0.5   0:00.00 top                       
  926 root      18   0  19672 1152 576  S 0.0  0.4   0:00.00 crond         
    1 root      15   0  10324 704  588  S 0.0  0.3   0:00.02 init               
  311 root      16  -4  12580 704  388  S 0.0  0.3   0:00.06 udevd                       
  874 root      16   0  5884  592  472  S 0.0  0.2   0:00.06 syslogd                   
  877 root      18   0  3780  420  336  S 0.0  0.2   0:00.00 klogd

Uso total de MEM = 12,1%

No entanto, 226mb usados de 262mb, com 36mb livres - ou seja, 86,25% usados.

Mesmo considerando a troca, a memória total é 262mb * 2 = 524mb. Dado 226mb é usado, 43.12% é usado. Ambos são muito mais altos do que os processados pelo topo.

O servidor é um novo VPS de 256MB rodando o CentOS 5.2 - ainda não instalou nada nele. Executando o webadmin; ou seja, sem Plesk.

Esta questão é fundamentalmente sobre a informação conflitante que parece ser dada pelo topo; mas também estou me perguntando se esse uso de memória é normal, para um servidor que não está executando aplicativos particularmente intensivos de memória. Eu pretendo instalar o Apache / Ruby EE / Passenger; No entanto, se o uso de memória já é tão alto, não tenho certeza de como ele vai funcionar.

    
por Sai 23.02.2010 / 09:18

3 respostas

6

Top, que é a figura na coluna %MEM , está contando a quantidade de RSS de memória (Tamanho do Segmento Residente, basicamente páginas fisicamente na memória que possuem dados reais sobre elas) como uma porcentagem da memória física total em sua máquina ou VPS.

Por outro lado, free está contando apenas isso, a quantidade de páginas de memória física que não têm dados nelas, e não foram atribuídas a buffers, cache ou kernel. Em um sistema operacional semelhante ao Unix, o sistema operacional tenta manter esse número o mais baixo possível usando páginas livres para o cache de disco. A única vez que você provavelmente terá um alto valor de memória livre é logo após a inicialização de sua máquina ou se você encerrar um programa que estava consumindo uma grande quantidade de memória física.

Este uso de memória é normal? A resposta curta é sim. É comum que os programas Unix aloquem (ou seja, solicitam ao SO) significativamente mais memória do que eles usariam. Se você olhar para a coluna VSS , para os processos listados, o total é superior a 463mb. Isso é porque

  • Grande parte da memória contabilizada em cada processo será fisicamente mapeada para a mesma biblioteca, digamos glibc
  • Em geral, o sistema operacional compromete a memória com o aplicativo, com base no fato de que a maioria dos aplicativos nunca coleta o que eles pediram.

Descobrir o uso da memória do processo é mais uma arte do que uma IMHO científica, veja as discussões no link . Meu conselho é ficar de olho no iostat -xm e garantir que sua máquina não esteja trocando muito.

    
por 23.02.2010 / 09:26
2

Além da resposta de Dave Cheney:

O uso total de memória menos buffers e cache (159M) é ~ 67M e 67 / 524M ~ 12%. Quanto mais memória for necessária executando os processos, o sistema limpará automaticamente o cache antigo e alocará isso.

Se você correr livremente, você terá uma idéia da quantidade de memória que está realmente em uso, executando processos e o que realmente está disponível.

$ free -m
             total       used       free     shared    buffers     cached
Mem:           247        218         29          0         46         96
-/+ buffers/cache:         74        172
Swap:          556          0        556

A linha em que você está interessado é o - / + buffers / cache

    
por 23.02.2010 / 09:31
0

Você provavelmente descobrirá que não são todos os processos que estão sendo executados em sua máquina - apenas os 13 principais classificados por uso de memória.

Se você rodar "ps" você verá todos os processos que estão rodando, o que, por estoque, o Ubuntu instala é 109.

    
por 23.02.2010 / 09:28