2013-06-22 4 views
5

laufen Wenn das System über genügend Arbeitsspeicher ausgeführt, tötet ubuntu 12.04 den mysql-Prozess:Restart Mysql automatisch, wenn ubuntu auf EC2 Micro Instanz es tötet, wenn der Speicher

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

So endet der Prozess getötet werden. Dies geschieht bei Lastspitzen von Servern und hauptsächlich, weil Apache ausbricht und der verbleibende verfügbare Speicher verbraucht wird. Mögliche Ansätze könnten sein:

  • ändern irgendwo irgendwie die Priorität mysql, es ist so nicht getötet (wahrscheinlich eine schlechte fix als etwas anderes getötet wird)
  • den Status von MySQL Monitor und automatisch neu startet, wenn er getötet wird (der, an den ich denke, aber ich weiß nicht, wie ich das machen soll.

Wie sehen Sie das?

Antwort

8

Die abrupte Beendigung eines Datenbankservers ist ein sehr schwerwiegender Absturz. Sie müssen dies in einem Produktionssystem vermeiden, da es möglicherweise nicht sauber neu gestartet wird.

Der Datenbankserver ist eine freigegebene Ressource und sollte in der Produktion fast nie ungeplant beendet werden. Das einzige, was zu einem ungeplanten Abbruch führen sollte, ist ein katastrophaler Hardware- oder Stromausfall. Die meisten ordnungsgemäß konfigurierten Produktionsdatenbankserver werden einmal alle zehn Jahre oder seltener außerplanmäßig beendet. Ernst.

Was ist zu tun?

Korrigieren Sie Ihre Apache-Konfiguration. Begrenzen Sie die Anzahl der Worker-Threads und Prozesse, die verwendet werden können, damit sie nicht in den Status "Unerlaubt" umgewandelt werden können. Erfahren Sie, wie Sie dies tun. Es ist wichtig. Siehe hier: http://httpd.apache.org/docs/current/mod/mpm_common.html#maxrequestworkers

Beheben Sie die Fehler in Ihrer Web-App, die Ihren Apache laufen lassen.

Wenn Sie können, verschieben Sie Ihren mysqld-Server auf einen anderen Server-Computer von Apache, so dass die beiden nicht für die gleichen Hardwareressourcen konkurrieren.

Konfigurieren Sie Ihre mysqld, um die Anzahl der Verbindungen zu begrenzen, die von Apache-Worker-Threads oder anderen Clients akzeptiert werden. Ihre Webanwendung behandelt wahrscheinlich die Situation, in der ein Worker-Thread auf eine Verbindung warten muss. Siehe hier. http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_connections

Sind Sie auf einer EC2-Mikroinstanz? Sie müssen eine ernsthafte Abstimmung vornehmen. Siehe hier: http://ubuntuforums.org/showthread.php?t=1979049

+4

Danke Ollie! Ja, Sie haben recht, ich versuche eine EC2-Mikroinstanz zu quetschen. Dann werde ich Apache und MySQL weiter abstimmen und anfangen, zu vergrößern und zu verkleinern. Aber gibt es eine Möglichkeit zu erkennen, dass mysql ging und es automatisch neu startet? Nur für den Fall, dass es passiert, wenn ich den Server nicht kontrolliere und ich ihn nicht mehr optimiert habe. – Alex

3

Sie mysql Status jede Minute überprüfen (mit cron) und neu starten, wenn es abgestürzt ist:

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

danke dafür. es hat für mich funktioniert. nur dass/var/spool/mail/root nach einiger Zeit groß wird. – sulabh

Verwandte Themen