En exécutant certains serveurs Linux avec un seul ou quelques démons de service système vitaux, je voudrais ajuster le tueur OOM pour ces processus démonisés au cas où quelque chose d'étrange se produirait. Par exemple, aujourd'hui un serveur Ubuntu faire fonctionner MySQL a un démon MySQL tué à cause des tonnes de apt-checker
processus ont été consommaient toute la mémoire et le noyau a pensé qu'il était une bonne idée de tuer MySQL.
Je sais que je peux ajuster le score en utilisant le /proc/$(pidof mysqld)/oom_score_adj
fichier pour donner au noyau un indice que je ne préfère pas que MySQL soit tué, mais cela ne survit pas au redémarrage du service. Dois-je modifier les scripts init / upstart du package pour inclure ces ajustements? Je ne pense pas que ce soit une solution très élégante car je ferais des ajustements aux fichiers appartenant à un package. Serait-il possible de se connecter aux scripts upstart / init en général et de les ajuster conditionnellement? Ou suggéreriez-vous d'exécuter un script indéfini comme while true{ adjust_oom(); sleep 60;}
?
la source
Réponses:
Plusieurs systèmes modernes de supervision des démons ont un moyen de le faire. (En effet, puisqu'il existe un outil de chargement de chaîne pour le travail, ils ont sans doute tous un moyen de le faire.)
oom score
dans le fichier de travail.OOMScoreAdjust=
paramètre de l'unité de service. Vous pouvez utiliser des fichiers de correctifs d'unité de service pour affecter les unités de service préemballées.oom-kill-protect
outil du jeu d'outils nosh dans lerun
programme du service.Si vous convertissez une unité de service système, l'
En bonus, vous pouvez le rendre paramétrable: et définissez la valeur du paramètre dans l'environnement du service (présumé être lu à partir d'un envdir associé au service, ici manipulé avec laconvert-systemd-units
outil convertira en fait leOOMScoreAdjust=
paramètre en une telle invocation deoom-kill-protect
.rcctl
cale de l'ensemble d'outils Nosh):Lectures complémentaires
oom-kill-protect
. ensemble d'outils nosh. Logiciels.oom score
". Upstart Cookbook .OOMScoreAdjust
".systemd.exec
. pages de manuel de systemd. freedesktop.org.rcctl
. ensemble d'outils nosh. Logiciels.la source
Cela est possible dans Ubuntu en utilisant Upstart et l'
oom score
option de configuration.la source
Vous pouvez le pirater dans MySQL lui-même (par exemple OpenSSH
sshd
fait cela), mais c'est un peu trop hardcore et très sale (problèmes avec les mises à jour, etc.)Vous pouvez le faire dans un wrapper ou dans le script init - le score doit être hérité (et dans un wrapper que vous voudrez probablement faire de
exec mysqld "$@"
toute façon).Utilisation
cgroups
- cela vous donnera un peu plus de flexibilité et il peut être rendu permanent dans le sens où les paramètres appropriés peuvent être appliqués automatiquement au redémarrage du service. Voir par exemple le contrôle de la priorité des applications à l'aide de cgroups pour plus d'informations. Pour atteindre l'automatisme que vous recherchez, vous voudrez probablement jeter un œil à libcgroup , qui contient un démon qui peut gérer à la volée la modification des cgroups d'un processus en cours selon un ensemble de règles, ou simplement utiliser lecgexec
wrapper ( du même paquet).la source