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

