Matança do processo fantasma

1

Eu tenho um aplicativo java em execução em um servidor CentOS 5.4.

Aleatoriamente, e aparentemente sem causa, esses processos vão morrer, não através da saída do aplicativo, ou devido a minha morte, mas devido a algo que parece matar sem deixar vestígios.

Eu registro todas as saídas do aplicativo, bem como envio stderr e stdout para um arquivo de log, e nenhum desses logs de saída contém nada que indique porque esses processos morreram.

Meu primeiro instinto foi o matador de OOM no nível do kernel, mas o sistema nunca está com pouca memória, e geralmente tem algo entre 1 GB e 3 GB de memória livre em um determinado ponto no tempo.

Minha pergunta é: alguém sabe o que pode estar causando isso ou alguém tem alguma ideia de onde eu poderia começar a procurar?

Obrigado.

    
por Martin 03.02.2011 / 19:02

2 respostas

1

Iniciando meu aplicativo java com

strace -tt -o strace.out <java command>

Mostrou que estava sendo enviado um comando SIGHUP que estava matando. Acontece que, embora eu estivesse definindo o processo para ser executado em segundo plano (anexando & ao comando), o comando ainda está vinculado ao thread que o criou.

Isso significava que, para os comandos executados pelo apache, eles seriam eliminados sempre que o encadeamento de trabalho que os criava fosse reciclado e, para comandos executados manualmente, eles eram eliminados sempre que eu efetuava o logout.

Eu solucionei isso simplesmente prefixando nohup no comando, ou seja,

nohup java -jar /path/to/my/java.jar arguments &
    
por 14.03.2011 / 13:17
0

Os processos podem estar recebendo algum sinal que faz com que eles saiam, possivelmente devido a hardware ruim (por exemplo, memória danificada pode causar segfaults). Se você não vir nada, o syslog / dmesg tentará ativar os dumps principais. Você pode então executar gdb para ter uma ideia do que está acontecendo.

    
por 03.02.2011 / 20:21