Eliminar processos se a média de carga alta

1

Não há muito tempo, LA no meu servidor aumentou para 400 e eu não consegui nem mesmo fazer o login no servidor usando o ssh. Existe algum software, que pode evitar essas situações, matando automaticamente processos que fazem grande carga no servidor?

PS. Debian 6.0.5

    
por Drakmail 27.06.2012 / 22:11

4 respostas

3

Você pode usar um cão de guarda como Monit para cuidar dos processos de seu interesse e reiniciá-los se eles consumir recursos em excesso.

Algo como isso seria usado para monitorar o Apache:

 check process apache with pidfile /var/run/httpd.pid
       start program = "/etc/init.d/httpd start"
       stop program  = "/etc/init.d/httpd stop"
       if cpu > 40% for 2 cycles then alert
       if totalcpu > 60% for 2 cycles then alert
       if totalcpu > 80% for 5 cycles then restart
       if mem > 100 MB for 5 cycles then stop
       if loadavg(5min) greater than 10.0 for 8 cycles then stop

Portanto, se o cpu% do processo do Apache ou qualquer um de seus filhos tiver mais de 40%, envie um alerta. Se estiver acima de 80%, reinicie o Apache.

O Monit também iniciará o Apache se ele não estiver sendo executado por algum motivo, o que é uma maneira razoável de manter os serviços críticos em funcionamento (se você não tiver algo como o Upstart disponível).

Isso pressupõe que você tenha um conjunto de processos que você pode segmentar para esse tipo de monitoramento. Presumivelmente, você suspeita que um aplicativo em particular pode ser um problema.

    
por 05.07.2012 / 02:00
2

Quando seu LA é gerado e você não pode fazer login via ssh, experimente Grey Goo um pequeno e confiável servidor de execução de comando remoto e cliente projetado exclusivamente para situações de emergência:

link

    
por 04.07.2012 / 22:57
1

Carregar é um valor agregado de tarefas com o trabalho de processamento restante para ser executado.

É uma medida do restante do processamento a ser feito após cada processo ter recebido uma fatia de tempo justa da CPU. Efetivamente coloca um número em quão bem o sistema está lidando com competição de recursos entre processos.

O IOWait também pode aumentar a carga se os processos estiverem causando um grande uso de IO, o que apontaria para um problema de memória (uso excessivo e troca agressiva) ou um problema subjacente de E / S. Se for apenas um processo que usa cargas de E / S, seria punido normalmente sem afetar muito outros processos.

Eu não acho que você pode simplesmente matar um processo para corrigir um problema como este, pois o problema decorre de algumas demandas de processos na CPU. Você pode matar um grupo de processos ou um conjunto de threads para um processo específico.

    
por 27.06.2012 / 22:33
0

Aqui está um script simples que pode matar um processo se a carga do sistema for maior que um determinado limite.

Neste exemplo, o script mata o processo "named" se a carga for maior que 2.5.

Se a carga cair abaixo desse nível, ela verificará se o nome está em execução e a inicia, se necessário.

#!/bin/bash

NOTIFY="2.5"

TRUE="1"    
FTEXT='load average:'
LOAD5MIN="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f2 | sed 's/ //g')"

RESULT=$(echo "$LOAD5MIN > $NOTIFY" | bc)

if [ "$RESULT" == "$TRUE" ]; then
    echo "High load"
    killall -9 named
else
    pgrep named || /etc/init.d/bind9 start 1>/dev/null 2>/dev/null
fi
    
por 28.06.2016 / 15:42