A execução de top
no modo em lote para relatar tamanhos de memória periodicamente pode ser usada para ver quem está usando a memória quando as coisas vão para o sul. A execução de sar
no modo batch deve fornecer alguns bons diagnósticos sobre o uso de memória e E / S relacionadas. Executar munin
para monitorar o sistema deve fornecer um gráfico com bons detalhes sobre o que a memória está sendo usada. Isso pode ajudar muito.
Você pode usar o limits.conf para limitar o tamanho máximo do núcleo dos programas. Corretamente definido, isso deve matar todos os programas que estão vazando memória. Isso funciona com o módulo pam_limits. Os limites também podem ser definidos com o comando ulimits
.
Você está executando alguns programas que podem usar grandes quantidades de memória. Algumas coisas que você pode olhar incluem.
- Aplicativos mal programados em execução sob
apache2
podem vazar memória. Você deve ver o tamanho da memória aumentar quando isso acontece. Você pode ajustar o apache2 para reciclar as crianças após um determinado número de utilizações definindoMaxRequestsPerChild
para 100 ou mais. Se isso resolver o problema, você precisará resolver o vazamento. Eu assisto isso primeiro. - O MySQL pode tentar carregar dados na memória. Se você tiver muitos dados na memória, isso pode causar uma surra, mas não deve ser tão dramático quanto você está vendo.
- Se você tiver um grande sistema de arquivos
tmpfs
montado, poderá vazar memória se os arquivos não forem excluídos quando usados. Grandes arquivos de longa duração também podem ser um problema. - Se o problema ocorrer mais ou menos na mesma hora do dia, você pode ter um programa agendado que está vazando memória.
- Se você tiver um programa que aloque memória compartilhada, mas não a liberte antes de sair, você terá um vazamento de memória relativamente invisível. Se a memória compartilhada estiver bloqueada na memória, ela poderá forçar a troca. A quantidade de memória compartilhada disponível é geralmente relativamente limitada.
- O pacote liquidsoap + icecast pode ter problemas de buffer que usam memória. Eu não usei essa combinação, então não tenho certeza de como isso apareceria.
Uso normal da memória: A memória livre não é algo que você deseja muito. Se o seu sistema está funcionando há muito tempo e tem muita memória livre, algo está errado. Toda vez que você lê ou grava um arquivo, os blocos vão para o cache do buffer. Isso irá reduzir sua memória livre e é uma coisa boa. O sistema manterá espaço livre suficiente para iniciar alguns programas sem procurar em outro lugar por memória. Como muitos programas são executados rapidamente, sua memória será retornada ao pool livre quando eles pararem de executar.
Quando você lê um arquivo que está no cache de buffer, não é necessário acesso ao disco e a leitura é resolvida a partir do cache do buffer. As gravações usam um mecanismo semelhante. Se o seu sistema precisar de memória, o cache de buffer será um dos primeiros locais usados. A maioria dos buffers pode ser liberada imediatamente.
Se você tiver um vazamento de memória, verá memória livre e os buffers começarão a encolher. Este ainda não é um problema grave, pois a memória vazada deve eventualmente ser movida para o espaço de troca. Seu sistema ainda será executado corretamente até que você preencha o espaço de troca e reduza o espaço livre restante até o ponto em que os programas não possam ser iniciados. É típico que uma pequena quantidade de espaço de troca possa ser usada.