Eu tenho um servidor Ubuntu 9.10 de 64 bits que parece consumir toda a memória disponível. De acordo com meus gráficos Munin, quase toda a memória usada está no cache de troca, no cache e no cache de placas. (Acho que isso significa caches de memória virtual, estou certo ao assumir isso?)
Quando o uso da memória se aproxima de 100%, alguns serviços do sistema (embora não todos), como o SSH, tornam-se lentos e não respondem. Após a reinicialização do sistema, o desempenho e o uso de memória tornam-se normais por um tempo.
Algumas curiosidades interessantes:
- O sistema executa Apache 2, MySQL, Munin e sshd.
- Os picos de uso de memória acontecem no mesmo horário todas as noites (às 22h em ponto).
- Parece não haver nada no crontab para nenhum dos usuários e nada em /etc/cron.d/* fora do comum, muito menos algo que ocorreria às 22h.
Minha pergunta é: como faço para descobrir o que está causando a perda de memória? Eu tentei os utilitários usuais (por exemplo, ps, top, etc), mas não consigo encontrar nada incomum.
Alguma ideia? Desde já, obrigado!
Responder1
Tem certeza de que está relacionado à memória? Os caches não deveriam sugar toda a memória; eles são temporários e dinâmicos e são realocados conforme a necessidade de memória ativa. Os caches existem apenas para acelerar as coisas e aproveitar a memória que, de outra forma, seria desperdiçada.
Eu provavelmente veria se você tem algo mais atrapalhando o sistema. Ao usar o Top, você percebe uma alta carga do sistema? O que é nesses momentos comparado aos tempos “normais”? Você classifica o uso da CPU e o uso da memória ativa?
Você tentou executar o iotop para ver a E/S do disco e ver se algo está prejudicando a unidade?
Como são todos os crontabs?
Você tirou um instantâneo do ps durante o dia algumas vezes e comparou-o por volta das 10h para ver quais processos apareceram?
Em última análise, que tal conexões de rede com netstat? alguma coisa incomum entrando ou saindo do sistema naquele momento?
Parece que pode estar reconstruindo ou indexando um banco de dados do sistema como "locate", mas não deve desacelerar o sistema ao fazer isso.
Responder2
O uso da memória e a lentidão são sintomas do mesmo problema. Algo acontece naquele momento que faz com que o cache do disco do sistema se destrua. O sistema usa cada gota de memória para evitar excesso de E/S de disco, mas ainda assim falha.
Isso é mais comum quando ocorrem muitas leituras de disco em áreas do disco que não foram lidas recentemente. Os dados usados recentemente que podem ser usados novamente são retirados do cache e, quando precisam ser lidos novamente, precisam competir com o fluxo de leituras existente.
Verifique se há algum processo que realiza muita E/S de disco. Por exemplo, updatedb
ou algum tipo de script de backup. Se for uma ferramenta caseira, pode ser útil alterá-la para ignorar o cache do disco e não forçar outras coisas a sair do cache. Pode ajudar, ionice
para que não prejudique tanto as leituras sensíveis ao tempo.