Ich habe einen Rackspace-Server, den ich gemietet habe, um meine persönlichen Projekte auszuführen. Da ich billig bin, hat es 256 MB RAM und kann ehrlich gesagt nicht viel verarbeiten. Von Zeit zu Zeit, wenn der Datenverkehr stark ansteigt, beschließt der Server, Prozesse zu beenden, und es scheint, dass mysqld ein beliebtes Programm zum Beenden ist. Ich versuche, meine Site zu besuchen, und erhalte die Meldung, dass beim Herstellen der Datenbankverbindung ein Fehler aufgetreten ist. Eine Überprüfung der Protokolle zeigt, dass mysqld aufgrund von Speichermangel getötet wurde.
Da ich immer noch so arm bin wie gestern und den RAM meiner Rackspace-VM nicht aktualisieren möchte, kann ich dann sagen, dass mysqld automatisch neu gestartet werden soll, wenn es abstirbt?
Ich habe den Gedanken, so etwas wie Crontab zu verwenden, aber leider weiß ich auch nicht genau, was ich dort tun soll. Ich schätze, ich bin ein Produkt der Generation "Linux on your desktop", da ich die meisten Aufgaben auf meinem Desktop und Laptop ausführen kann (auf denen Linux fast ausschließlich ausgeführt wird), aber immer noch nicht über ausreichende Serveradministrationsfähigkeiten für Linux verfügen.
Auf dem Server wird CentOS 6.3 ausgeführt
Antworten:
Dies ist keine saubere Lösung. Es ist offensichtlich besser, das Problem zunächst zu vermeiden. Wie auch immer, ich bin mir nicht sicher, wie CentOS Dienste verwaltet, aber ich denke, es nutzt
service
. In diesem Fall können Sie überprüfen, ob dermysql
Dienst mit ausgeführt wirdDieser Befehl wird erfolgreich beendet, wenn er ausgeführt
mysql
wird, und gibt einen Nicht-0-Beendigungsstatus zurück, wenn dies nicht der Fall ist. Sie können den Dienst daher starten, wenn er nicht mit diesem Befehl ausgeführt wird:Sie können diese Zeile hinzufügen
/etc/crontab
, um den Befehl jede Minute zu starten:quelle
Das ist etwas störend.
mysqld wird immer von mysqld_safe neu gestartet, da sich im unteren Bereich eine Endlosschleife befindet
mysqld_safe
, um nach abnormalen Herunterfahren zu suchen . Wenn der Fehler zu schwerwiegend ist, kann nicht einmalbei nachfolgenden Versuchenmysqld_safe
nicht neumysqld
gestartet werden.In dieser Situation
mysqld_safe
ist es möglicherweise keine gute Idee,mysqld
den Start zu erzwingen , wennmysqld_safe
dies ohnehin abgelehnt wird.Sie müssen das Fehlerprotokoll in my.cnf finden, in dem es sich befindet
oder
Lesen Sie die Textdatei (wahrscheinlich durch Ausführen
tail -30 log-filename
) und suchen Sie die Quelle der mysqld-Verarbeitung, die heruntergefahren wurde.quelle
In einem Brute-Force-Versuch, die Dinge auf einem VPS mit geringem Arbeitsspeicher am Laufen zu halten, habe ich eine Modifikation von terdoms Antwort verwendet , um MySQL zu überprüfen und neu zu starten.
Ich brauchte zu ändern ,
mysql
ummysqld
es an die Arbeit zu machen. Ohne würde ich den Fehler "ERROR! MySQL is running but PID file could not be found
" bekommen.Leitet auf meinem CentOS 7.2-System auf
/sbin/service
um/bin/systemctl status
, sodass der folgende Befehl schneller ausgeführt werden kann.Am Ende habe ich die folgende Zeile zur Root-Crontab des Systems hinzugefügt. Es überprüft jede Minute, ob MySQL ausgeführt wird, und leitet stdout auf null um. Beim Starten des Dienstes wird nichts ausgegeben, es sei denn, ein Fehler tritt auf. Sie müssen die Nullumleitung nicht beim letzten Befehl hinzufügen.
Die doppelte Pipe
||
bedeutetOR
und führt den zweiten Befehl aus, wenn der erste Befehl fehlschlägt. (Gibt einen Exit-Code größer als Null zurück.)Es ist so, als würde man sagen: "Führe den ersten Befehl aus oder , wenn der erste Befehl aus irgendeinem Grund fehlschlägt, führe den zweiten Befehl aus."
Dies unterscheidet sich vom doppelten kaufmännischen Und-Zeichen,
&&
das wie das Sprichwort lautet: "Führen Sie den ersten Befehl aus, und führen Sie den zweiten Befehl nur aus, wenn der erste Befehl erfolgreich war."quelle
Folgendes kommt von jonnyreeves.co.uk :
Und der Täter ist PHP-FPM! Ein kurzer Blick auf Google ergab, dass ein anderer Wordpress-Kunde an ähnlichen Symptomen leidet. der rat war, die php-fpm pool konfiguration (/etc/php-fpm.d/www.conf) und die pm konfiguration anzupassen. Die Hauptänderung bestand darin, von
pm = dynamic
zupm = ondemand
mit einempm.max_children
Wert von5
(basierend auf der Beobachtung von ~ 5% Speicherbelegung pro Worker) zu wechseln . Nach dem Ändern der Konfiguration habe ich alle Dienste neu gestartet und die Speichernutzung überprüft.Nach dem Neustart war die Speichernutzung erheblich geringer.
quelle