2013-06-22 21 views
5

Quando il sistema esaurisce la memoria, ubuntu 12.04 uccide il processo di mysql:Riavvia Mysql automaticamente quando ubuntu su EC2 micro esempio uccide quando a corto di memoria

Out of memory: Kill process 17074 (mysqld) score 146 or sacrifice child 

Così il processo finisce ucciso. Questo succede ai massimi livelli di carico del server e principalmente a causa dell'apogeo che si scatena e si mangia la memoria disponibile rimanente. Possibili approcci potrebbero essere:

  • Change da qualche parte in qualche modo la priorità di mysql, quindi non è ucciso (probabilmente una cattiva soluzione come sarà ucciso qualcos'altro)
  • monitorare lo stato di mysql e riavviare automaticamente ogni volta che è ucciso (quello a cui sto pensando, ma non so come farlo).

Come lo vedi?

risposta

8

La chiusura brusca di un server di database è un arresto anomalo molto grave. È necessario evitare ciò in un sistema di produzione, perché potrebbe non riavviarsi in modo pulito.

Il server di database è una risorsa condivisa e non dovrebbe quasi mai terminare in modo non pianificato nella produzione. L'unica cosa che dovrebbe causare la terminazione non pianificata è un hardware catastrofico o mancanza di alimentazione. I server di database di produzione configurati correttamente hanno una terminazione non pianificata una volta ogni dieci anni o meno frequentemente. Sul serio.

Cosa fare?

Corregge la configurazione di Apache. Limita il numero di thread di lavoro e processi che può utilizzare, quindi non può essere eseguito in modo selvaggio. Impara come fare questo. È vitale Vedi qui: http://httpd.apache.org/docs/current/mod/mpm_common.html#maxrequestworkers

Correggere i difetti nell'app Web che causano l'esecuzione di apache.

Se è possibile, spostare il server mysqld su un server diverso da Apache, in modo che i due non contendano le stesse risorse hardware.

Configura il tuo mysqld per limitare il numero di connessioni che accetterà da thread worker di apache o altri client. La tua app web probabilmente gestisce la situazione in cui un thread di lavoro deve attendere una connessione. Vedere qui. http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_connections

Sei su una microistanza EC2? Devi fare un po 'di messa a punto seria. Vedi qui: http://ubuntuforums.org/showthread.php?t=1979049

+4

Grazie Ollie! Sì, hai ragione, sto provando a spremere un'istanza micro EC2. Quindi terrò a punto apache e mysql e inizierò a guardare in scala e ridimensionare. Ma c'è un modo per rilevare che mysql è andato giù e riavvialo automaticamente? Nel caso in cui se succede quando non sto monitorando il server e mentre non l'ho ottimizzato di più. – Alex

3

È possibile controllare lo stato mysql ogni minuto (con cron) e riavviarlo se è caduto:

* * * * * service mysql status | grep running || service mysql restart 
+0

grazie per questo. ha funzionato per me solo che/var/spool/mail/root diventa grande dopo un po 'a causa di questo. – sulabh