Kernel matando o processo java

0

Temos três caixas do Ubuntu 12.04 com carga balanceada atrás do nginx. Nós originalmente instalamos o tomcat7 usando o apt-get, mas nos deparamos com um problema em que acredito que o kernel esteja eliminando o processo java devido à OOM. Eu mudei para a distribuição mais recente do tomcat7 e instalei-a manualmente. O mesmo resultado.

Temos um arquivo de troca ativado. Originalmente, eu tinha a permeabilidade definida como 0 por recomendação do provedor hospedado. Mudei para swapty de 60. Parece que ainda está acontecendo.

Aqui está o que eu vejo no syslog:

Feb  8 06:35:38 processor1 kernel: [658920.280798] select 1 (init), adj 0, size 371, to kill    
Feb  8 06:35:38 processor1 kernel: [658920.280813] select 425 (rsyslogd), adj 0, size 497, to kill    
Feb  8 06:35:38 processor1 kernel: [658920.280827] select 18905 (bash), adj 0, size 1568, to kill    
Feb  8 06:35:38 processor1 kernel: [658920.280831] select 28556 (java), adj 0, size 63276, to kill    
Feb  8 06:35:38 processor1 kernel: [658920.280837] send sigkill to 28556 (java), adj 0, size 63276

Informações do sistema:

  • 512MB de RAM
  • 512MB de swapfile ativado.
  • Ambiente de tempo de execução do OpenJDK (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
  • VM do servidor OpenJDK de 64 bits (compilação 24.45-b08, modo misto)
  • apache-tomcat-7.0.50
  • Memória Java definida com -Xmx64m

Eu posso ver o uso da memória subindo e descendo com o processo java. Eu vejo a coleta de lixo acontecendo. Eu monitorarei o uso e verei a queda de RAM para < 5MB e uma coleta de lixo irá retornar a memória de volta para mais de 100MB livres.

Nenhum erro ocorrendo no Tomcat7. O processo é simplesmente morto pelo menos uma vez por dia pelo kernel do Linux.

    
por user246046 08.02.2014 / 21:52

1 resposta

0

Eu vi algumas situações quando o OOM-killer entrou em ação, mas o log feito pelo OOM-killer não era nada parecido com a sua pergunta. Então eu pensei que algo fosse mudado no OOM-killer em uma nova versão do kernel, então eu fiz um livegrep para a frase "send sigkill to" , aqui está o resultado . Como você pode ver, esse tipo de log não vem do OOM-killer, mas do assassino de baixa memória do Android. É estranho.

Conhecendo a origem do problema, encontrei em breve este e este relatório de bug . Eles explicam a situação e parece que esse bug foi corrigido no kernel, mas parece que não foi corrigido no kernel preciso.

Eu não sei quando isso será corrigido em seu kernel específico (que eu acho que é 3.8), mas você pode atualizar sua instalação 12.04 para o kernel de 13.10 instalando o pacotes de ativação de hardware com

sudo apt-get install --install-recommends linux-generic-lts-saucy xserver-xorg-lts-saucy libgl1-mesa-glx-lts-saucy

É claro que se você não usar o xserver (sem GUI) na sua máquina, apenas instale o novo kernel com:

sudo apt-get install --install-recommends linux-generic-lts-saucy
    
por falconer 09.02.2014 / 13:38