Apache levando ao bloqueio / congelamento do sistema

0

A conclusão do título pode estar errada, dado que o problema está perto de um ano e só agora consegui obter algumas informações sobre o assunto. Isso é em um centos 5, rodando em um antigo PIII com 384 MB de RAM. Note que antes de cerca de um ano atrás, quando não me lembro exatamente o que mudou, este mesmo servidor estava funcionando muito bem. Pode ter sido um CentOS mais antigo.

uname diz "Linux localhost.localdomain 2.6.18-410.el5.centos.plus # 1 SMP qua 11 de maio 21:46:57 BRT 2016 i686 i686 i386 GNU / Linux"

O problema se apresenta com congelamentos aleatórios, a cada poucos dias, às vezes duas vezes por dia. O congelamento não é um congelamento real em que se eu tentar se conectar com o ssh para o servidor, depois de alguns minutos, eu recebo um prompt de usuário e depois de outro tempo muito longo, eu me desconecto com o tempo limite, então eu não começa a digitar a senha. Mas, eventualmente, se eu deixar "congelado" por um dia ou dois, ele ficará completamente bloqueado.

A única solução é uma reinicialização, a partir do botão.

Ontem finalmente recebi uma dica do servidor físico em que o LED do HDD estava totalmente iluminado no momento do congelamento (não percebi isso antes, já que eu não estava realmente olhando), então liguei o IOTOP para monitorar a atividade e deixou correndo em uma janela de putty.

Só agora ele congelou em algum momento. Aqui está a captura de tela.

Eu vejo que existem muitos processos httpd, um par de mysqld e o mais importante é o jurnaling.

Eu não tenho ideia de como interpretar essas porcentagens no contexto do congelamento do meu servidor.

Eu tenho um strong pressentimento de que este é um problema de configuração e eu deveria ser capaz de controlar isso ajustando algumas configurações, mas não estou conseguindo adivinhar o que é isso.

Eu sei que reiniciar o apache a cada poucas horas prolonga o tempo que o servidor está ok. E se meu tráfego aumentar (de muito poucas visitas por dia), o servidor congelará em questão de horas.

Quaisquer ponteiros em que mais verificar? Ou qual configuração ajustar?

Obrigado.

    
por ciuly 03.06.2016 / 20:46

1 resposta

0

Muitas tentativas e erros mais tarde, cheguei a uma solução alternativa, pois ainda não consegui encontrar a causa raiz disso. (Quero dizer, parece ser um IP aleatório direcionando meu servidor a cada 1-2 dias). Eu usei a página de status do servidor htpd e, em seguida, o utilitário atop para ver quais recursos foram hogged durante o congelamento e chegou a ver que era o disco.

Tantas tentativas depois, eu criei o seguinte script. Primeiro, há um número máximo de processos filho httpd permitidos, já que no meu caso, operações normais não geram mais de 20 processos filhos. Esse cheque por si só não é suficiente, já que aconteceu algumas vezes que demorou cerca de 24 horas para que a contagem de processos ocorresse após o servidor ter congelado. Então, vem a verificação do iostat, que é feita 2 vezes em intervalos de 5 + 5 segundos para evitar picos de uso do HDD local.

cnt='ps -Af | grep httpd | grep -v rotatelogs | grep -v grep | wc -l'
now='date +%Y-%m-%d_%H-%M'

if [ $cnt -ge 40 ]
then
  /usr/bin/wget -q -O /root/apache_status_$now http://<your server here>/server-status
  /sbin/service httpd restart
fi

# your hdd here
dsk='/usr/bin/iostat -dx /dev/hda 5 2 | grep hda | tail -1 | awk '{print $12}''

if (( $(echo "$dsk > 98" |bc -l) ))
then
  /bin/sleep 5
  dsk='/usr/bin/iostat -dx /dev/hda 5 2 | grep hda | tail -1 | awk '{print $12}''
  if (( $(echo "$dsk > 98" |bc -l) ))
  then
    /sbin/service httpd restart
  fi
fi

o acima é executado em um cron job assim

0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /root/monitor-apache.sh

Espero que isso ajude alguém a gerenciar situações semelhantes.

    
por 25.07.2016 / 18:57