Auf einigen Linux-Servern werden einzelne oder nur einige wichtige Systemdienst-Daemons ausgeführt. Ich möchte den OOM-Killer für diese daemonisierten Prozesse anpassen, falls etwas Merkwürdiges passiert. Zum Beispiel heute einige Ubuntu - Server ausgeführt wird MySQL hat einen getötet MySQL - Daemon , weil Tonnen apt-checker
Prozesse wurden alle Speicherraubend und der Kernel dachte , es war eine gute Idee MySQL zu töten.
Ich weiß, dass ich die Punktzahl mithilfe der /proc/$(pidof mysqld)/oom_score_adj
Datei anpassen kann , um dem Kernel einen Hinweis zu geben. Ich bevorzuge nicht, dass MySQL beendet wird, aber das überlebt einen Neustart des Dienstes nicht. Sollte ich Init / Upstart-Skripte aus dem Paket bearbeiten, um diese Anpassungen einzuschließen? Ich denke nicht, dass das eine sehr elegante Lösung ist, da ich Anpassungen an Dateien vornehmen würde, die zu einem Paket gehören. Wäre es möglich, sich generell in Upstart / Init-Skripte einzumischen und diese bedingt anzupassen? Oder würden Sie vorschlagen, ein unbestimmtes Skript auszuführen wie while true{ adjust_oom(); sleep 60;}
?
quelle
Antworten:
Einige moderne Überwachungssysteme haben die Möglichkeit, dies zu tun. (Da es für diese Aufgabe ein Kettenladewerkzeug gibt, haben wohl alle ein Mittel, dies zu tun.)
oom score
in der Auftragsdatei.OOMScoreAdjust=
Einstellung in der Wartungseinheit. Sie können Service-Unit-Patch-Dateien verwenden, um vorgefertigte Service-Units zu beeinflussen.oom-kill-protect
Tool aus dem nosh-Toolset imrun
Programm für den Service.Wenn Sie eine
Als Bonus können Sie es parametrisierbar machen: und setzen Sie den Wert des Parameters in der Umgebung des Dienstes (der aus einem dem Dienst zugeordneten envdir gelesen werden soll, hier manipuliert mit demconvert-systemd-units
Systemserviceeinheit konvertieren, konvertiert das Tool dieOOMScoreAdjust=
Einstellung in einen solchen Aufruf vonoom-kill-protect
.rcctl
Shim des nosh-Toolset ):Weitere Lektüre
oom-kill-protect
. nosh toolset. Software.oom score
". Upstart-Kochbuch .OOMScoreAdjust
".systemd.exec
. systemd manpages. freedesktop.org.rcctl
. nosh toolset. Software.quelle
Dies ist in Ubuntu mit Upstart und der
oom score
Konfigurationsoption möglich.quelle
Du könntest es in MySQL selbst hacken (zB OpenSSH
sshd
macht das), aber das ist ein bisschen zu hardcore und sehr schmutzig (Probleme mit Updates etc.)Sie können dies in einem Wrapper oder im Init-Skript tun - die Partitur sollte vererbt werden (und in einem Wrapper würden Sie wahrscheinlich
exec mysqld "$@"
sowieso tun wollen).Verwendung
cgroups
- es gibt Ihnen ein bisschen mehr Flexibilität und es kann in dem Sinne dauerhaft gemacht werden, dass die entsprechenden Einstellungen automatisch beim Neustart des Dienstes angewendet werden können. Weitere Informationen finden Sie z. B. unter Steuern der Priorität von Anwendungen mithilfe von Gruppen . Um den gewünschten Automatismus zu erreichen, sollten Sie sich wahrscheinlich libcgroup ansehen , das einen Daemon enthält, der Änderungen an Gruppen von laufenden Prozessen im laufenden Betrieb gemäß einer Reihe von Regeln verarbeiten kann, oder einfach dencgexec
Wrapper verwenden ( aus dem gleichen Paket).quelle