O que pode causar a queda de TODOS os serviços de um servidor, mas ainda respondendo ao ping? e como descobrir

9

Já aconteceu duas vezes em poucos dias que meu servidor está inoperante completamente, ou seja, http, ssh, ftp, dns, smtp, basicamente TODOS os serviços param de responder, como se o servidor tivesse sido desligado, exceto que ainda responde ao ping , que é o que mais me impressiona.

Eu tenho alguns scripts php que causam uma carga enorme (CPU e memória) no servidor em rajadas curtas, usadas por um pequeno grupo de usuários, mas geralmente o servidor "sobrevive" perfeitamente a essas rajadas e, quando desce, nunca coincidem com esses picos de uso (não estou dizendo que não possa ser relacionado, mas não acontece logo após esses).

Não estou pedindo para que você possa magicamente me dizer a causa final dessas falhas, minha pergunta é: existe um único processo cuja morte pode causar a queda de todos esses serviços simultaneamente? O engraçado é que todos os serviços de rede ficam inativos, exceto o ping. Se o servidor tivesse 100% da CPU consumida por algum processo, também não responderia ao ping. Se o apache travasse por causa de (por exemplo) um script php quebrado, isso afetaria apenas o http, não o ssh e o dns .... etc.

Meu sistema operacional é o Cent OS 5.6

Mais importante, após a reinicialização do servidor, quais logs do sistema devo observar? / var / log / messages não revela nada de suspeito.

matteo
fonte

Respostas:

8

( tl; dr ainda está respondendo ao ping é um comportamento esperado, verifique o uso de memória)

As solicitações de eco do ICMP (ou seja, ping) são tratadas pela pilha de rede no kernel, sem nenhuma outra dependência.

O kernel é conhecido como "residente na memória", o que significa que sempre será mantido na RAM e não pode ser trocado para o disco como um aplicativo comum.

Isso significa que, nas situações em que você fica sem memória física, os aplicativos são trocados para o disco, mas o kernel permanece onde está. Quando a memória física e a troca estiverem cheias (e o sistema não puder mais gerenciar seus programas), a máquina sofrerá uma queda. No entanto, como a) o kernel ainda está na memória eb) ele pode responder às solicitações de ping sem a ajuda de mais nada, o sistema continuará respondendo ao ping apesar de tudo estar morto.

Em relação ao seu problema, eu suspeitaria fortemente de problemas de memória. Instale "sysstat" e use o comando "sar" para ver um log de memória / cpu / load / io load etc. Eu esperaria que, nos momentos de falha, você veria 100% físico e swap usados.

Eu também consideraria olhar no dmesg ou no / var / log / messages qualquer sinal de que o OOM-killer (memória insuficiente) seja chamado. Este é o sistema de emergência do kernel que começará a matar processos no caso de esgotamento da memória. Sua eficácia depende em grande parte de quais processos estão sendo mortos. Um único processo que consome a memória será eficientemente eliminado e liberado, no entanto, um site baseado em apache gerará processos de substituição assim que um processo filho for morto.

Cooperativas
fonte
+1 para OOM Killer
HTTP500
Muito obrigado, tenho quase certeza de que esse é o problema, pois a RAM e a troca estavam cheias antes da falha do servidor. (Eu posso ver nas estatísticas do gerente de ovh). E é provavelmente alguns dos meus scripts php malucos usando muita memória. No entanto, me confunde por algumas razões. (1) parece que a memória consumida pelo php não é liberada posteriormente, mas isso não faria sentido; (2) Em qualquer caso, eu não esperaria um sistema operacional adequado para morrer completamente apenas por causa de um (ou mesmo alguns) processa usando muita memória ... Eu esperaria que
Matteo
recusar-se a alocar memória para programas que solicitem quando não houver memória RAM suficiente para o sistema continuar funcionando corretamente ... Quero dizer, um programa com erros ou mesmo mal-intencionado nunca poderá destruir todo o sistema ...
matteo
3
O @matteo Linux tem o que chama de "supercomprometimento": apenas porque você malloc()1 GB de RAM não significa que você irá usá-lo, então o gerenciador de memória controla a quantidade de memória que seu programa pensa que possui e quanta memória o Na verdade, o programa foi usado e realmente funciona bem, na maioria das vezes. Pelo menos, até que mais de um programa realmente queira usar todos os 1 GB que acha que possui.
DerfK 21/10/12
1
@matteo vejo nenhuma indicação de que esta é uma questão OOM. Normalmente, o OOM-killer seleciona processos ou processos específicos que atendem a determinados critérios, mas nem sempre mata um daemon como o ssh. Definitivamente, isso é do lado de E / S. Você não explicou sua situação / especificações de hardware, como solicitei na minha resposta.
E221 #
5

Geralmente, é um problema de E / S ou subsistema de disco. Muitas vezes, isso será associado a uma média de carga do sistema extremamente alta. Por exemplo, o sistema detalhado no gráfico abaixo ficou sem resposta (ainda era passível de ping) quando um script foi executado incorretamente, bloqueou um monte de arquivos e a carga subiu para 36 ... em um sistema de 4 CPUs.

insira a descrição da imagem aqui

Os serviços que estão sendo executados na RAM e não exigem acesso ao disco continuam em execução ... Portanto, a pilha de rede (ping) está ativa, mas os outros serviços são interrompidos quando o acesso ao disco é necessário ... SSH quando uma chave é referenciada ou pesquisa de senha necessária. O SMTP tende a desligar quando a média de carga atinge cerca de 30 ...

Quando o sistema estiver nesse estado, tente um controle remoto nmapcontra o IP do servidor para ver o que está acontecendo.

Seu registro provavelmente não funcionará se for um problema de disco ou armazenamento ...

Você pode descrever a configuração do hardware? Esta é uma máquina virtual? Qual é o layout de armazenamento?

Mais do que registrar, você deseja ver se consegue representar graficamente o desempenho do sistema e entender quando isso está acontecendo. Veja se isso se correlaciona com uma atividade específica.

ewwhite
fonte
Supondo que esse seja o problema, existe uma maneira de dizer ao SSH para manter as senhas na memória, portanto, mesmo que o servidor esteja nesse estado, posso pelo menos conseguir fazer login nele via ssh e executar alguns comandos para ver o que está acontecendo?
Matteo
1
Se for E / S, você precisa chegar ao fundo do problema. Se for um tempo limite da matriz de disco ou uma interação do driver, será diferente de um script que executa mal ou de um problema de contenção de recursos.
ewwhite