como sei se e porque o linux está eliminando meus processos?

1

Estou trabalhando em uma das distribuições linux da amazon (4.4.11-23.53.amzn1.x86_64). (1gb ram) nessa instância
Estou executando o node.js com o módulo forever. (Certifica-se de reiniciar o processo node.js se ele falhar). Minha experiência é:
O servidor da web funciona por cerca de 2 a 3 horas e o processo simplesmente desaparece. Antes de executar o servidor, cerca de 70% da memória é tirada e cerca de 80% depois.
Eu olhei em todos os arquivos em / var / log e não encontrei nada relevante para os processos mortos. E também registrei todas as saídas do meu servidor de nó e não obtive nada de lá também. Eu estou supondo que o Linux matou o meu processo porque ficou sem memória, mas não tenho certeza de como verificar novamente. E não tenho certeza por que o uso de memória aumentaria quando o uso de memória do aplicativo da web não aumenta com o tempo.

    
por user3382714 26.07.2016 / 01:31

1 resposta

1

Para ter uma ideia de por que seu processo morre, faça com que o processo pai imprima o status de saída . O status de saída indica se o programa é devido a um sinal e inclui um código de saída de 8 bits do processo. O código de saída de 8 bits é convencionalmente 0 para sucesso e 1..125 para indicar um erro.

Em um programa C / Perl /…, você pode consultar todo o status de saída. Consulte a documentação da biblioteca do seu idioma. De um script de shell, o status de saída incluindo a informação do sinal é empacotado em um único valor de 8 bits, com os sinais sendo reportados como valores 128+ n onde n é o sinal número.

#!/bin/sh
myprogram
ret=$?
if [ $ret -eq 0 ]; then
  echo "The program exited normally";;
elif [ $ret -gt 128 ]; then
  echo "The program died of signal $((ret-128)): $(kill -l $ret)"
else
  echo "The program failed with status $ret"
fi

Se o Linux matar seu programa porque o sistema ficou sem memória, isso é registrado nos logs do sistema, especificamente nos logs do kernel, que podem ser exibidos com o comando dmesg e que são normalmente gravados em um arquivo em /var/log (não sei qual nome de arquivo a distribuição da Amazon usa).

Não AssUMe que seu processo ficou sem memória e foi morto por causa disso. Verifique o que aconteceu. A explicação mais plausível é que o programa tem um bug e caiu.

    
por 27.07.2016 / 02:19