Reinicie o servidor automaticamente se a memória virtual estiver muito baixa

4

Há um bom número de softwares em execução no meu servidor: httpd, verniz, mysql, memcache, java ..

Cada um deles está usando uma parte da memória virtual e o verniz foi configurado para receber 3GB de memória para ser executado.

Devido à alta carga de tráfego, que é de 100K, nosso servidor ficou sem memória e o oom-killer é chamado. Temos que reiniciar o servidor.

Temos 8 GB de memória virtual e, devido a algum motivo, não podemos estender a memória maior.

A minha pergunta é - Existe algum script automatizado, que irá monitorar quanta memória virtual resta e com base em certos critérios, digamos que se 500MB restante do que reiniciar o servidor automaticamente?

Eu sei que esta não é a solução adequada, mas temos que fazê-lo, caso contrário, não sabemos quando o servidor receberá o OOM e, quando soubermos e reiniciarmos o servidor, perderemos nossos usuários visitantes.

    
por Sukhjinder Singh 11.12.2012 / 05:39

2 respostas

7

Se eu entendi corretamente, você quer algo como o seguinte:

  1. Verifique quanta memória resta no VPS.
  2. Se houver 500 M de memória, reinicie o VPS.

Isso pode ser feito da seguinte forma

  1. Escreva um script que verifique quanta memória resta e reinicie o VPS
  2. Adicione este script ao crontab para automatizar a tarefa.

por exemplo

#!/bin/bash

mem=$(free -m | awk '/Mem:/{print $4}')

(( mem <= 500 )) && reboot

Torne o script executável

chmod +x scriptname // note que não adicione uma extensão

Adicione o script ao cron

crontab -e

* * * * * user_to_run_the_script /path/to/the/script

Espero que você entenda a ideia.

    
por 11.12.2012 / 10:48
2

Eu tive um problema semelhante e, apesar de não querer questionar sua pergunta, que é boa e específica, devo dizer que você precisa de uma correção a longo prazo.

O killer da OOM entra em ação porque seu servidor está ficando sem memória. Desativar OOM killer não ajudará com isso - você ainda ficará sem memória e seu servidor eventualmente falhará. Claro que o assassino da OOM nem sempre ajuda, mas desativá-lo também não.

A reinicialização do servidor corrigirá temporariamente o problema, mas isso acontecerá novamente.

Eu tinha um problema semelhante com um servidor . Instalar monit e configurá-lo para avisar quando a memória estava acabando me permitiu acessar o servidor quando algo estava começando a acontecer, então eu pude diagnosticar corretamente e resolvê-lo. Eu também adicionei swap através de um swapfile para aumentar o tempo que eu tive para acessar o servidor enquanto o problema estava ocorrendo.

No meu caso, meu servidor da Web foi configurado para iniciar muitos servidores sobressalentes para o carregamento que o servidor poderia manipular. Depois que descobri a causa raiz do problema, resolvi o problema, e o servidor não travou desde então.

    
por 11.12.2012 / 16:00