Eu tenho um servidor de rackspace que tenho alugado para executar meus projetos pessoais. Desde que eu sou barato, ele tem 256Mb de RAM e honestamente não aguenta muito. De vez em quando, quando há um aumento acentuado no tráfego, o servidor decide começar a matar processos e parece que o mysqld é popular para matar. Tento visitar meu site e sou recebido com a mensagem de que houve um erro ao estabelecer a conexão com o banco de dados. A inspeção dos logs revela que o mysqld foi morto devido à falta de memória.
Como ainda sou tão pobre quanto ontem e não quero atualizar a RAM da minha VM de espaço em rack, existe uma maneira de dizer a ele para reiniciar automaticamente o mysqld quando ele morrer?
Penso em usar algo como o crontab, mas, infelizmente, também não sei exatamente o que fazer lá. Eu acho que sou produto da geração "Linux no seu desktop", já que posso fazer a maioria das coisas no meu desktop e laptop (que executam o Linux quase exclusivamente), mas ainda não tenho muitas habilidades de administração de servidores para o Linux.
O servidor executa o CentOS 6.3
Respostas:
Esta não é uma solução limpa, obviamente seria melhor evitar o problema em primeiro lugar. De qualquer forma, não tenho certeza de como o CentOS gerencia serviços, mas acho que ele usa
service
. Nesse caso, você pode verificar se omysql
serviço está sendo executado comEste comando será encerrado com êxito se
mysql
estiver em execução e retornará um status de saída diferente de 0 se eu não estiver. Portanto, você pode iniciar o serviço se ele não estiver em execução com este comando:Você pode adicionar esta linha
/etc/crontab
para ativar o comando a cada minuto:fonte
Isso é um pouco perturbador.
O mysqld é sempre reiniciado pelo mysqld_safe porque existe um loop infinito na parte inferior
mysqld_safe
para verificar se há desligamentos anormais. Se o erro for muito grave, nemmysqld_safe
seria possível reiniciarmysqld
nas tentativas subseqüentes.Dada a situação
mysqld_safe
projetada, pode não ser uma boa ideia forçar omysqld
início, casomysqld_safe
a rejeite.Você precisa localizar o log de erros em my.cnf, que estará em
ou
Leia o arquivo de texto (provavelmente executando
tail -30 log-filename
) e encontre a fonte do processamento do mysqld desligada.fonte
Em uma tentativa de força bruta para manter as coisas funcionando em um VPS com pouca memória, usei uma modificação da resposta de terdom para verificar e reiniciar o MySQL.
Eu precisava mudar
mysql
paramysqld
obtê-lo para o trabalho. Sem ele, eu receberia o erro "ERROR! MySQL is running but PID file could not be found
".No meu sistema CentOS 7.2,
/sbin/service
redireciona para/bin/systemctl status
, portanto, o comando a seguir é mais rápido de executar.Acabei adicionando a seguinte linha ao crontab raiz do sistema. Ele verifica a cada minuto se o MySQL está rodando e redireciona o stdout para null. Iniciar o serviço não produzirá nada a menos que algo dê errado, portanto, não há necessidade de adicionar o redirecionamento nulo no último comando.
O pipe duplo
||
significaOR
e executará o 2º comando se o primeiro comando falhar de alguma forma. (Retorna um código de saída maior que zero.)É como dizer: "Execute o 1º comando ou , se o 1º comando falhar de alguma forma, execute o 2º comando".
Isso é diferente do E comercial duplo,
&&
que é como dizer: "Execute o 1º comando e , somente se o 1º comando tiver sido bem-sucedido, execute o 2º comando".fonte
O seguinte é de jonnyreeves.co.uk :
E o culpado é php-fpm! Um rápido google encontrou outro cliente do Wordpress sofrendo de sintomas semelhantes; o conselho era ajustar a configuração do pool php-fpm (/etc/php-fpm.d/www.conf) e ajustar a configuração da pm. A principal mudança foi passar de
pm = dynamic
parapm = ondemand
com umpm.max_children
valor de5
(com base na observação de ~ 5% de uso de memória por trabalhador). Depois de alterar a configuração, reiniciei todos os serviços e verifiquei o uso de memória.Depois de reiniciar, o uso da memória foi significativamente menor.
fonte