Ejecutando algunos servidores Linux con solo o algunos demonios vitales de servicio del sistema, me gustaría ajustar el asesino OOM para esos procesos demonizados en caso de que ocurra algo extraño. Por ejemplo, hoy en día algún servidor Ubuntu ejecutar MySQL tiene un demonio de MySQL muerto a causa de toneladas de apt-checker
procesos fueron consumiendo toda la memoria y el núcleo pensó que era una buena idea para matar MySQL.
Sé que puedo ajustar el puntaje usando el /proc/$(pidof mysqld)/oom_score_adj
archivo para darle al núcleo alguna pista. No prefiero que se elimine MySQL, pero eso no sobrevive al reinicio del servicio. ¿Debo editar las secuencias de comandos init / upstart del paquete para incluir estos ajustes? No creo que sea una solución muy elegante, ya que haría ajustes a los archivos que pertenecen a un paquete. ¿Sería posible enganchar en scripts de arranque / inicio en general y ajustarlo condicionalmente? ¿O sugeriría ejecutar un script indefinido como while true{ adjust_oom(); sleep 60;}
?
fuente
Respuestas:
Varios sistemas modernos de supervisión de dæmon tienen un medio para hacerlo. (De hecho, dado que existe una herramienta de carga en cadena para el trabajo, podría decirse que todos tienen un medio para hacerlo).
oom score
en el archivo de trabajo.OOMScoreAdjust=
configuración en la unidad de servicio. Puede usar archivos de parche de unidades de servicio para afectar las unidades de servicio preempaquetadas.oom-kill-protect
herramienta del conjunto de herramientas nosh en elrun
programa para el servicio.Si está convirtiendo una unidad de servicio del sistema, la
Como beneficio adicional, puede hacerlo parametrizable: y establezca el valor del parámetro en el entorno del servicio (se supone que se lee desde un entorno asociado con el servicio, aquí manipulado con laconvert-systemd-units
herramienta de hecho convertirá laOOMScoreAdjust=
configuración en dicha invocación deoom-kill-protect
.rcctl
cuña del conjunto de herramientas nosh ):Otras lecturas
oom-kill-protect
. conjunto de herramientas nosh. Softwaresoom score
". Upstart Cookbook .OOMScoreAdjust
".systemd.exec
. páginas de manual de systemd. freedesktop.org.rcctl
. conjunto de herramientas nosh. Softwaresfuente
Esto es posible en Ubuntu usando Upstart y la
oom score
opción de configuración.fuente
Podría hackearlo en MySQL (por ejemplo, OpenSSH lo
sshd
hace), pero eso es demasiado duro y muy sucio (problemas con las actualizaciones, etc.)Puede hacer esto en un contenedor o en el script de inicio: la puntuación debe heredarse (y en un contenedor que probablemente quiera hacer de
exec mysqld "$@"
todos modos).Uso
cgroups
: le dará un poco más de flexibilidad y puede hacerse permanente en el sentido de que las configuraciones apropiadas se pueden aplicar automáticamente al reiniciar el servicio. Consulte, por ejemplo, la prioridad de control de las aplicaciones que utilizan cgroups para obtener más información. Para lograr el automatismo que está buscando, es probable que desee echar un vistazo a libcgroup , que contiene un demonio que puede manejar el cambio de cgroups de un proceso en ejecución sobre la marcha de acuerdo con un conjunto de reglas, o simplemente usar elcgexec
contenedor ( del mismo paquete).fuente