Gerenciamento de memória - 850 MB de ram física em uso!!!!!

Iniciado por RogerYoda, 27 de Abril de 2006, 12:45

tópico anterior - próximo tópico

RogerYoda

Olá amigos,


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.

Uso de memória no Linux

Understanding memory usage on Linux

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.

Joseph

esse comando free tah eh doido, veh o meu:

niceboy@infowork:~$ free
            total       used       free     shared    buffers     cached
Mem:        776000     683524      92476          0      28244     482040
-/+ buffers/cache:     173240     602760
Swap:       530136          0     530136

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.

AlexBR

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. :-)

mjr

Relmente, o uso de memória está absurdo:

Citar
mjr@amdlinux:~$ free
total       used       free     shared    buffers     cached
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.
My Computer:

AMD Athlon64 3700
MB Asus A8N-SLI
2 Gb DDR 400mhz
VGA Geforce FX6600 256 MB PCI-EX
HD SATA Samsung 120Gb
Monitor LCD Soyo 19'

galactus

#4
Me parece que existe um erro na leitura da memória. Melhor ficarem com a leitura do "Monitor de sistema"!

Vejam o meu:

galactus@Casa:~$ free
                 total           used         free       shared    buffers     cached
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
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

RogerYoda

Obrigado pelas respostas...

galactus,

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:

Citação de: "galactus"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:

Citação de: "eggx.geo"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.

http://ubuntu.wordpress.com/2005/10/07/memory-swap-management/

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:

            total       used       free     shared    buffers     cached
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á...

JotaEle

Olhem o meu exemplo:


$ free
            total       used       free     shared    buffers     cached
Mem:        776044     580192     195852          0      16100     297504
-/+ buffers/cache:     266588     509456
Swap:            0          0          0


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,

$ cat /proc/meminfo
MemTotal:       776044 kB
MemFree:        198224 kB
Buffers:         15972 kB
Cached:         295548 kB
SwapCached:          0 kB
Active:         417588 kB
Inactive:       126684 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       776044 kB
LowFree:        198224 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:             476 kB
Writeback:           0 kB
Mapped:         296516 kB
Slab:            18760 kB
CommitLimit:    388020 kB
Committed_AS:   437140 kB
PageTables:       1720 kB
VmallocTotal:   245752 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
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
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).
AMD Sempron(TM) 2200+, placa-mãe ASUS A7V8X-X ACPI BIOS Revision 1013, memória RAM DDR 512 MB,  HD SAMSUNG SP0802N 80GB particionado com LVM, gravador de DVD LG HL-DT-ST DVDRAM GSA-4167B, placa de vídeo NVidia FX6200 128MB, impressora jato de tinta Epson C65 e webcam A4Tech PK635.
Ubuntu 6.06

JotaEle

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
[/url]
AMD Sempron(TM) 2200+, placa-mãe ASUS A7V8X-X ACPI BIOS Revision 1013, memória RAM DDR 512 MB,  HD SAMSUNG SP0802N 80GB particionado com LVM, gravador de DVD LG HL-DT-ST DVDRAM GSA-4167B, placa de vídeo NVidia FX6200 128MB, impressora jato de tinta Epson C65 e webcam A4Tech PK635.
Ubuntu 6.06

galactus

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.
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.