Gerenciamento de memória - 850 MB de ram física em uso!!!!!
Autor Tópico: Gerenciamento de memória - 850 MB de ram física em uso!!!!! (Lida 5635 vezes)
« Online: 27 de Abril de 2006, 12:45 »
Não sei se este assunto foi tratado em tópicos anteriores mas ficaria muito feliz em falar um pouco a respeito. É sobre o gerenciamento de memória.
Há um tempo atrás um amigo meu buscava uma distribuição Linux e eu recomendei que ele testasse o Ubuntu. Instalação fácil, detecção de hardware impecável, usabilidade sem igual... Apaixonou-se pela distro. Mas aí, só por curiosidade eu pedi que ele digitasse o comando free. Considero-me novato em Linux, visto que tenho ainda muito a aprender, mas a saída que o referido comando retornou me assuntou bastante. Informou que 850 MB de memória FÍSICA estavam em uso. Detalhe... ele havia acabado de iniciar o sistema. Diante daquela situação que me parecia absurda pedi que ele reiniciasse o PC e quando retornasse digitasse o mesmo comando. Foi o que ele fez... e tivemos novamente os 850 MB de ram FÍSICA em uso.
==> O hardware do PC mencionado é:
* Athlon 64 3200+ Venice
* MB MSI K8N Neo4 Platinum
* 1GB de memória
* HD 80 GB Sata 2
* Placa de vídeo = GeForce 6600 GT / EVGA
==> Usando Ubuntu 5.10
É uma máquina respeitável e o desempenho ficou excelente, mas esse uso exagerado de memória levou-me a algumas reflexões:
1. Como é possível 850 MB de memória FÍSICA em uso assim que o sistema é iniciado?
2. Até que ponto posso acreditar nas informações passadas pelos comandos free e ps?
3. A informação está mesmo correta?
Por tal motivo fui pesquisando sobre gerenciamento de memória no Linux e se havia algum bug relatado sobre isso. Bug relatado não encontrei nenhum, mas achei 2 textos interessantes. O primeiro deles está em português o outro em inglês.
Então quero discutir 3 assuntos que possuem relação entre si.
1. O uso exagerado de memória física na situação que relatei.
2. O texto Uso de memória no Linux por Erick Sasse
3. O texto Understanding memory usage on Linux por Devin
Desde já agradeço a atenção... até mais.
« Resposta #1 Online: 27 de Abril de 2006, 16:56 »
esse comando free tah eh doido, veh o meu:
niceboy@infowork:~$ free
Mem: 776000 683524 92476 0 28244 482040
-/+ buffers/cache: 173240 602760
mas no gkrellm acusa o uso de 172 de memoria apos muito tempo de uso, e com varios aplicativos abertos, assim q me logo no sistema ele usa apenas 98 de 758mb.
no monitor do sistema acusa 176,8 de uso, quer dizer q ambos estao corretos, o erro eh no free, acho eu.
« Resposta #2 Online: 27 de Abril de 2006, 19:33 »
Olha... Eu acho que o kernel do ubuntu pode estar alocando mais memória do que realmente precisa. Quer dizer... Ao invés de ir alocando memória a medida que os aplicativos pedem, o kernel pode estar alocando muita coisa e depois saia distribuindo quando necessario. Talvez isso otimize a memória virtual. Não sei! Bom... Isso é só um chute. :-)
« Resposta #3 Online: 29 de Abril de 2006, 14:06 »
Relmente, o uso de memória está absurdo:
mjr@amdlinux:~$ free
Mem:2077016 473588 1603428 0 25780 165736
-/+ buffers/cache: 282072 1794944
Swap: 1052216 8700 1043516
outra coisa que pode ser relacionado, qndo eu estou iniciando um probrama como Limewire e mando alterar de tela pelo 3ddesktop para usar outra janela enquanto carrega ele trava tudo, tipo, o mouse mexe, mas clica em nda, será que pode ser memória cheia penso que com 2 gb de memória isso seria dificil.
« Resposta #4 Online: 29 de Abril de 2006, 14:42 »
Me parece que existe um erro na leitura da memória. Melhor ficarem com a leitura do "Monitor de sistema"!
galactus@Casa:~$ free
Mem: 1036456 992628 43828 0 119268 650648
-/+ buffers/cache: 222712 813744
Swap: 498004 12532 485472
galactus@Casa:~$
Enquanto o monitor de sistema reporta:
223,4MB de 1GB utilizados. E mais 12MB de 486MB da swap utilizados. Isso depois de mais de 7 horas dele ligado, duas sessões já terem sido iniciadas e uma delas fechada e muitos programas terem sido abertos e fechados.
Este assunto já foi longamente debatido aqui:
http://www.ubuntuforum-pt.org/index.php?topic=971&postdays=0&postorder=asc&highlight=mem%F3ria&start=0
« Última modificação: 01 de Julho de 2006, 14:55 por galactus »
« Resposta #5 Online: 30 de Abril de 2006, 00:37 »
Peço desculpas por criar outro tópico sobre o assunto, realmente não havia notado este tópico sobre isso.
Mas é que 850 MB de ram física em uso assustam qualquer um, e isso ao iniciar o sistema... O outro tópico foi realmente muito esclarecedor, principalmente quando você cita uma notícia do Br-Linux:
Mas é exatamente isso que falei antes, não se trata de abrir e fechar aplicações, pelo menos não no meu caso. Ele ocupa muita memória sem que eu tenha "aberto" nenhuma aplicação e depois não libera mais esta memória. Só reiniciando. Olha, acabei de ler uma notícia no br-linux sobre a análise de memória do sistema. Um grupo de brasileiros conseguiu incluir uma ferramenta para medir a performance e analisar o consumo de memória, para o kernel 2.6.13. Parece que o atual sistema não é muito preciso, vejam o que eles disseram sobre o uso da memória:
"As informações de consumo de memória são: memória virtual, memória física, memória física compartilhada (suja ou limpa) e memória física privada (suja ou limpa)."
O link para quem quiser ler tudo:
http://br-linux.org/linux/?q=node/1954
Acho que pode ser isso, um BUG na leitura do consumo da memória.
A imprecisão na leitura de memória pode ser um bug? Sim, também me parece possível... No segundo link que citei acima, o autor tem uma boa explicação para que tal imprecisão ocorra. Insisto que leiam, o texto é muito bom.
Vou citar um pequeno trecho do texto traduzido: (obs.: meu inglês é péssimo)
Citação de: "Devin "
A maioria de programas principais no Linux usam bibliotecas compartilhadas para facilitar determinada funcionalidade. Por exemplo, um programa de edição de texto do KDE usa diversas bibliotecas compartilhadas do KDE (...), diversas bibliotecas de X (...), e diversas bibliotecas de sistema gerais (...). Muitas destas bibliotecas compartilhadas, (...), são usadas por muitos dos programas para o sistema Linux (...). Então o Linux se vale de um grande truque: carregará apenas uma cópia das bibliotecas compartilhadas na memória e usará essa cópia para cada programa que fizer referência a ele.
... muitas ferramentas não se importam muito com este truque muito comum; relatam simplesmente quanto de memória um processo usa, sem no entanto, levar em consideração se essa memória está compartilhada com outros processos também. Dois programas podiam conseqüentemente usar uma grande biblioteca compartilhada, mas, nas informações obtidas, tal biblioteca apareceria na contagem de memória dos dois programas; ou seja, a biblioteca está sendo contada em dobro, e isso pode confundir se você não sabe para onde está indo.
O texto é muito mais que isso, mas esta foi a parte que achei mais relevante para essa discussão. E fiquei aqui pensando no problema que um adm de sistemas teria em mãos ao designar recursos para um determinada tarefa ou até para planejar um upgrade. Imaginemos, por exemplo, que você tem em mãos um servidor usando PHP, MySQL e Apache (muito comum hoje em dia). Você desenvolveu a solução, e você também administrará tal servidor. Planeja tudo detalhadamente, e após conhecer tudo quanto pode acerca da situação que enfrentará, designa os recursos que seriam necessários para tal servidor.
Para um usuário doméstico menos mal, mas no mundo corporativo competitivo que temos... confiar plenamente nas informações passadas por esses comandos pode ser um tiro no pé. Pode significar investir demais, e no momento errado. Mas por outro lado, a situação não parece ser o caos que imagino, considerando o sucesso, e o uso crescente de Linux em servidores que exigem confiabilidade, estabilidade, rapidez e segurança. Mas para que assim seja, acredito que não foi acreditando cegamente no comando free que adms obtiveram êxito.
Ainda sobre o outro post... realmente vocês discutiram muito esse assunto, tem muita coisa por lá. Isso aqui por exemplo explica muitas coisas:
Pesquisei um pouco sobre o assunto e constatei que o uso de quase 100% da memoria ram é normal e em teoria não deve deixar o sistema mais lento, não por este motivo.
Parte desses 100% é cache. Então a memória utilizada pelos programas é a Memória Total (no meu caso quase 100%) - cache (15%) - Buffers (5%) = 80% da ram para programas.
Diz que o sistema age dessa forma para melhorar a performance.
Parece um dilema, ao inves de usar o mínimo possível da RAM a solução encontrada foi usar o máximo possível.
Segue um dos links que li a respeito.
Mas constatei que a memória utilizada não é toda liberada em forma de cache.
Eu abri vários programas até quase se esgotar depois fechei os programas e a memoria não foi totalmente liberada. Liberou muita coisa mas não ficou igual ao inicializar o sistema.
Mas tanto antes como depois de fechar os programas, a memória utilizada já era próximo de 100%.
Talvez o pessoal pudesse postar o resultado do comando free -m aqui no fórum para nós compararmos e verificar se existe algo diferente de um sistema para outro, tipo a memória usada ser menor do que 50%.
O da minha máquina deu isso:
Mem: 234 229 4 0 10 43
-/+ buffers/cache: 175 58
Swap: 352 146 206
Conclusão: Vou continuar procurando informações sobre isso, e torço para que isso seja melhor no Dapper (ainda não testei).
Até mais... qualquer outra informação sobre isso agradeço desde já...
« Resposta #6 Online: 30 de Abril de 2006, 22:39 »
Mem: 776044 580192 195852 0 16100 297504
-/+ buffers/cache: 266588 509456
como podem ver estou com 580MB de memória utilizados e 297MB de cache e 0MB de swap. Podem notar que o sistema está longe de usar swap, pois ainda tem 195MB de memória livre e o chache pode ser reduzido. A memória alocada para cache é utilizada pelo sistema para aumentar a velocidade a dados que já foram lidos uma vez, pois já estão na memória e não há necessidade de carregá-los a partir do disco (não confundir esse cache com o da CPU). Para fazer uma conferência dos dados sobre utilização de memória fornecidos por vários programas, podemos utilizar a informação do arquivo
/proc/meminfo que pode ser obtida da seguinte forma,
MemTotal: 776044 kB
MemFree: 198224 kB
Buffers: 15972 kB
Cached: 295548 kB
Active: 417588 kB
Inactive: 126684 kB
LowTotal: 776044 kB
LowFree: 198224 kB
Mapped: 296516 kB
Slab: 18760 kB
CommitLimit: 388020 kB
Committed_AS: 437140 kB
PageTables: 1720 kB
VmallocUsed: 25948 kB
VmallocChunk: 217588 kB
como podemos ver, os dados do comando free e do arquivo batem. O que torna o sistema lento é quando ele começa a utilizar o swap de forma constante. Isso pode ser verificado com o comando,
$ watch vmstat
5 0 0 176804 17292 315068 0 0 37 36 1199 794 28 3 68 1
neste caso podemos observar que as medidas si (swap in) e so (swap out) estão zeradas, o que é uma boa indicação de que o sistema não está utilizando swap.
E isto é só o começo da história sobre MM (gerenciamento de memória).
« Resposta #7 Online: 30 de Abril de 2006, 22:44 »
Há um bom artigo sobre esse tema na Linux Magazine que pode ser lido no seguinte endereço:
http://www.linuxmagazine.com.br/issue/03/analisando_desempenho.pdf
« Resposta #8 Online: 01 de Maio de 2006, 11:41 »
Execelente artigo RogerYoda. Notei que o meu DApper vem consumindo muita RAM depois que chamo o Limewire!
900MB consumidos! Mais 430MB de Swap! O sistema ficou uma carroça! Já postei no Fórum Gringo. Vamos ver se mais alguém passou por isos também.