[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: