Linux rodando lento com 0 swap deixado

4

Nosso servidor Linux está respondendo muito lentamente. top não mostra nenhum uso excessivo da CPU. Notei que, apesar de haver cerca de 5 GB de memória livre, o sistema está usando todo o swap sem nenhuma troca livre. Isso poderia ser motivo para o sistema ficar lento? Existe alguma solução além de reduzir o número de processos?

Em segundo lugar, embora haja memória livre disponível, por que o Linux já está trocando? Eu pensei que a troca é usada somente quando não há memória real.

free -m
             total       used       free     shared    buffers     cached
Mem:         32045      26218       5826          0        127        123
-/+ buffers/cache:      25967       6077
Swap:        16387      16387          0

Atualização:

    O
  • swapiness está no nível padrão: 60
  • Eu não acho que seja um sistema num
  • Eu vejo alguns processos Java sendo executados com um heap de 8 GB: -Xms8000m -Xmx8000m

Parece maluco no primeiro olhar, mas possivelmente alguém tenha motivos para fazer isso. Eu acho que isso é o que está comendo a maior parte do swap, mas eu preciso investigar como o heap java afeta o Linux swap e memória / performance em geral. Quaisquer ponteiros sobre o impacto da configuração acima do heap Java no desempenho do sistema serão realmente úteis.

    
por haps10 25.06.2012 / 05:24

2 respostas

2

Quantos processos Java foram inicializados com o heap de 8 GB? Talvez mantenha o máximo em 8 e abaixe o tamanho de heap inicial. Se você tiver o espaço em disco, experimente também aumentar o tamanho do swap

    
por 25.06.2012 / 13:24
2

Você tem tmpfs montagens? Estes são suportados pelo swap e podem ser a causa do espaço de swap zero disponível. Do syslog ou dmesg mostram algo inesperado? Tem certeza de que seu sistema não está constantemente trocando? Verifique vmstat -SK 1 e verifique as colunas si e so (trocado e retirado em KB / s). Se você precisar saber quais processos estão trocando, execute sudo iotop -od5 . Se você estiver executando o Ubuntu, você precisará de delayacct kernel flag para estatísticas completas. Para mim, o seu sistema parece ter cache e buffers muito pequenos para uma memória de sistema tão grande.

A troca é usada para melhorar o desempenho de todo o sistema. Exemplo disso seria trocar partes de um grande programa que está atualmente em suspensão para permitir o uso de mais memória para cache de disco ou buffers de arquivo. Se você fosse desabilitar a troca nesse caso, o sistema teria efetivamente cache de disco e buffers de arquivo menores. Como seu espaço de troca está cheio, você pode efetivamente sofrer com o mesmo problema.

O espaço de troca é especialmente importante se você tiver algum programa que "vaze" a memória (isto é, um programa adquire blocos de memória que não são realmente usados). Tal "vazamento" pode não ser um erro no programa, pode acontecer de a memória ser usada tão raramente que possa ser melhor tratada como vazada. Sem espaço de troca, essa memória perdida não pode ser usada como cache ou buffers.

Um sistema operacional rodando corretamente com memória virtual está usando swap praticamente sempre, a menos que todo o conjunto de trabalho (todos os arquivos acessados, toda a memória reservada pelos aplicativos e todos os buffers de gravação) caiba na memória por todo o tempo de execução do sistema. Na maioria dos casos, isso só é verdade se o sistema for constantemente reinicializado ou se o sistema tiver uma quantidade enorme de RAM em comparação com o tamanho total do sistema de arquivos.

    
por 29.06.2012 / 09:45