Re: Entendendo a sa?da do comando free
On Wed, Feb 27, 2002 at 05:33:37PM -0300, Gustavo Noronha Silva wrote:
> o xmms parecia estar com um baita memory leak, tava gastando memória até...
Basicamente, é por ele abre varios processos. Mais os docs do xmms dizem
que, se ele tem 5 processos de N megas, ele NAO esta usando 5N megas, e sim
N + alguma coisinha. Ele compartilha grande parte do que esta em memoria
entre os processos.
Dito isso, eu tambem suspeito que, mesmo assim, ele tem um certo leak.
> então fechei o xmms e comecei a ouvir meus oggs com o gqmpeg, aí usei o free -m
> e vi isso:
>
> total used free shared buffers cached
> Mem: 247 242 5 0 18 133
> -/+ buffers/cache: 90 157
> Swap: 94 0 93
Bem isso quer dizer que utilizada, ce tem 242, contando com a memoria gasta
em buffers. Sem contar com isso, tem 90 utilizada. E livre, ce tem 5, agora
se voce ignorar a memoria que esta ocupada com cache (de programas E
arquivos), voce tem 157 livres.
> pensei: vou iniciar o galeon e ver o swap começar a encher... não é possível que
> esteja gastando isso tudo!
>
> bom, iniciei o galeon e digitei http://127.0.0.1 a única coisa que mudou foi
> a linha do buffers/cache, nada do swap encher!
De fato. Linux mantem a memoria livre ocupada com cache, pro caso de voce
rodar o mesmo programa outra vez (ele puxaria direto da RAM, nao do HD).
Pense em um servidor de POP3, que roda varias copias do programa o tempo todo.
Agora, se voce rodar outro ELF que NAO esteja no cache, e nao ouver mais
memoria livre, ai sim, primeiro ele limpa buffers*, e logo cache. E so
entao, utiliza swap**.
> então basicamente eu queria que alguém me desse url para alguma documentação
> ou me explicasse o que cada um daqueles valores significa... man free não deu
> em nada, também não achei nada no /usr/share/doc/procps (ainda não tentei
> o google mas vou assim que conectar pra mandar esse email e os outros que
> estão na fila)
A lição aqui, basicamente, é que é necesário fazer diferença entre a memória
livre (que é aquela que, pode (ou nao) estar malloc()ed para buffers e
cache, mais que durante uma eventual necesidade, sera liberada
instantaneamente***), e a memoria osciosa, que é aquela que esta sem nada
mesmo, a primeira linha debaixo da coluna free do comando free.
A verdade é que, essa é uma das coisas que mais me fascina do VM do Linux.
Se voce tem 256 megas de memoria, e roda programas que utilizam so 32, se
voce nao desligar a maquina, vai chegar um dia em que uns 235 megas vao
estar ocupados, com cache e buffers. Ora, se voce tem um area de memoria que
é varias vezes mais rapida do que o hd, por que nao utilizar pra isso? No
caso de falta de memoria, so entao partimos pra limpar cache, e so entao,
pro swap****. Memoria osciosa nao ajuda em muita coisa. Cache que é liberado
na hora em que se precisa, vale muito mais a pena.
> se alguém puder me ajudar nesse dilema, ficarei grato =)
Espero ter ajudado. E espero nao ter dito besteira, tambem. :) Desculpe se
fui muito didático.
* (A menos que haja um lock durante uma operação de I/O muito intensiva.
** Alguns processos, que raramente acordam de novo, vao a swap diretamente,
como init.
*** Seria bom acreditar que é assim, mas tem mais magia envolvida nisso,
mais do que eu consigo compreender. :P
**** Leia * , ** e *** acima.
-- Jordi S. Bunster
Reply to: