MySQL protokolliert möglicherweise immer noch nichts, da es wahrscheinlich passiert, dass es vom System aufgrund des Systemspeicherdrucks von Apaches Kindern kurzerhand getötet wird. Es sollte eine Spur davon in / var / log / syslog geben.
MySQL sollte versuchen, sich bei einem Absturz oder einer erzwungenen Beendigung neu zu starten, aber wenn nicht genügend Speicher verfügbar ist, kann es das nicht tun ... und dieser zweite Fehler wird von mysqld_safe nicht als "Absturz", sondern als "Ablehnung" angesehen Start ", so wird es nicht weiter versuchen. Der fehlgeschlagene Neustartversuch wird von Administratoren häufig als "Absturz" interpretiert, da die Art des ursprünglichen Fehlers hinter einer leicht zu übersehenden Meldung im MySQL-Fehlerprotokoll verborgen ist:
mysqld_safe Number of processes running now: 0
Siehe InnoDB Crash Post Mortem für einen Umstand, von dem ich vermute, dass er Ihrem ähnlich ist.
Die scheinbar einfache Antwort auf das "Warum" ist, dass zwischen Apache und MySQL, der Last, die Sie haben, und Ihren aktuellen Konfigurationen nicht genügend Speicher auf dem Computer vorhanden ist und es einen Wendepunkt im Zusammenhang mit der Verkehrslast gibt, der diesen Zustand hervorruft .
Apache bedient jede gleichzeitige Browseranforderung eines untergeordneten Prozesses. Wenn also die Anzahl der gleichzeitigen Verbindungen steigt, steigt die Anzahl der untergeordneten Verbindungen. Sie müssen diesen Wert zunächst in der Apache-Konfiguration begrenzen, damit Sie verstehen, was tatsächlich die Zunahme gleichzeitiger Verbindungen verursacht. Ist dies einfach eine starke, aber legitime Verkehrsspitze? Eine Art Denial-of-Service? DB-Abfragen, die Anforderungen verzögern, weil sie zu lange ausgeführt werden? Etwas, das optimiert werden muss?
http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients
Das Einschränken gleichzeitiger Apache-Prozesse sollte dazu beitragen, dies zu verhindern. Um es klar auszudrücken, ist es naiv zu glauben, dass dies die vollständige Lösung ist, daher möchte ich dies nicht implizieren. Sobald die Prozesse auf ein vernünftiges oder zumindest sichereres Maß beschränkt sind, können Sie feststellen, was wirklich vor sich geht. (Es gibt andere Rückhaltekontrollen bei Apache, aber das ist nicht mein Fachgebiet.)
Die "Best Practice" besteht natürlich darin, Ihre Datenbank auf einer anderen Hardware auszuführen, damit die Anwendung sie nicht beenden kann. Oberflächlich betrachtet scheint es zwar effizienter zu sein, die Auslastung einer Maschine durch gemeinsame Nutzung zu maximieren, dies ist jedoch eine falsche Wirtschaftlichkeit. Der größte Teil des von MySQL in einer typischen Arbeitslast verwendeten Speichers wird beim Start zugewiesen und so lange gehalten, wie MySQL Server ausgeführt wird. Die Anforderungen an die CPU teilen sich wahrscheinlich die Spitzenzeiten für MySQL und Apache, da sie letztendlich die gleiche Last bedienen. Mit zwei m1.large-Maschinen anstelle der einzelnen m1.xlarge-Maschine sind Sie möglicherweise besser dran, und die Kosten wären gleich, da die kleinere genau die Hälfte des Preises der größeren ist ... selbst wenn Sie bereits im Voraus bezahlt haben Für den zusätzlichen Rabatt kann diese Änderung durchgeführt werden .
dmesg
helfen?