Eu tenho um servidor que executa o pacote liquidsoap + icecast e um site simples (httpd + mysqld). Nada especial. Visitantes em torno de mais de 2000 por dia, com cerca de 50 online simultaneamente, em média.
O servidor possui 8 GB de RAM. À medida que o tempo passa, a quantidade de memória livre diminui constantemente, embora nada de novo seja iniciado no servidor e não haja novos usuários. Em algum momento, ele começa a trocar, a carga no servidor aumenta e deixa de responder. Normalmente, o que faço é apenas reiniciar o servidor ...
O que pode ser feito para detectar o que exatamente vaza memória? Eu uso top para monitorar o uso de recursos, mas, tanto quanto vejo, não mostra nada útil:
Existe alguma maneira de descobrir o que usa tanta memória? ou o que começa a trocar fortemente para o disco? Alguma maneira de liberar memória sem reiniciar o servidor?
fonte
Respostas:
A execução
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çãosar
no modo em lote deve fornecer bons diagnósticos sobre o uso da memória e E / S relacionadas. A execuçãomunin
para monitorar o sistema deve fornecer um gráfico com bons detalhes sobre o uso da memória. Isso pode ajudar bastante.Você pode usar o limits.conf para limitar o tamanho máximo do núcleo dos programas. Definido corretamente, 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
ulimits
comandoVocê está executando alguns programas que podem usar grandes quantidades de memória. Algumas coisas que você pode ver incluem.
apache2
podem vazar memória. Você deve ver o tamanho da memória aumentar quando isso acontece. Você pode ajustar o apache2 para reciclar filhos após um certo número de usos, definindoMaxRequestsPerChild
para 100 ou mais. Se isso resolver o problema, será necessário resolver o vazamento. Eu assistiria isso primeiro.tmpfs
sistema de arquivos grande montado, poderá vazar memória se os arquivos não forem excluídos quando usados. Arquivos grandes e de longa duração também podem ser um problema.Uso normal da memória: A memória livre não é algo que você deseja muito. Se o seu sistema estiver em funcionamento há muito tempo e tiver muita memória livre, algo está errado. Toda vez que você lê ou grava um arquivo, os blocos entram no cache do buffer. Isso reduzirá sua memória livre e é uma coisa boa. O sistema manterá espaço livre suficiente para iniciar alguns programas sem procurar memória em outro lugar. 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 do buffer, nenhum acesso ao disco é necessário e a leitura é resolvida no cache do buffer. As gravações usam um mecanismo semelhante. Se o seu sistema precisar de memória, o cache do buffer será um dos primeiros locais usados. A maioria dos buffers pode ser liberada imediatamente.
Se houver um vazamento de memória, você verá a memória livre e os buffers começarem a encolher. Isso ainda não é um problema grave, pois a memória vazada deve ser movida para trocar espaço. Seu sistema ainda funcionará bem até você preencher o espaço de troca e reduzir o espaço livre restante até o ponto em que os programas não podem ser iniciados. É típico que uma pequena quantidade de espaço de troca possa ser usada.
fonte
sar
ajudará a identificar qual partição possui a E / S e pode ajudar a descobrir o problema.Você pode usar este comando para ver os 10 principais aplicativos relacionados ao uso de RAM:
Às vezes, este comando ajuda você se muitos subprocessos foram gerados:
Dessa forma, você pode ver quais processos pertencem um ao outro.
fonte
ps
outop
saída é a coisa certa a se procurar ao tentar detectar um vazamento de memória: não é apenas a porcentagem da memória física que o processo está usando atualmente? Mas outras partes da memória usada do processo (incluindo vazamento) podem ser trocadas. Talvez "tamanho" ou "vsize" seja mais apropriado para medir o tamanho de um processo? Por exemplo,ps -A --sort -size -o comm,size | head -n 11
oups -A --sort -vsize -o comm,vsize | head -n 11
Nada está realmente usando essa memória em termos de aplicativos.
Você precisa deduzir o valor 'em cache', que representa o cache da página, para ter uma idéia melhor do uso real da memória em termos de uso do programa.
Basicamente, esse é um bom gerenciamento de memória e, idealmente, é o que você deseja.
Veja o link aqui para obter mais informações: http://www.linuxatemyram.com/
fonte
Eu realmente não sou profissional nisso, mas sabão líquido + icecast estão relacionados a multimídia. Quando o sistema está livre, ele armazena em cache e / ou ocupa memória para uso futuro. E se o tráfego aumentar a uma determinada hora do dia / durante um período de tempo, ele começará a trocar. Nesse ponto, se as solicitações (usuários visualizando conteúdo) aumentarem, os recursos necessários serão mais de 8 GB de RAM.
fonte