Cómo utilizar el sistema Linux OOM (Out Of Memory Killer) con elegancia
El kernel de Linux asigna memoria en función de las necesidades de las aplicaciones que se ejecutan actualmente en el servidor. Como esto suele ocurrir por adelantado, la aplicación no utiliza toda la memoria asignada. Esto provocará un desperdicio de recursos. El kernel de Linux permite una resolución excesiva de la memoria para mejorar la eficiencia del uso de la memoria. El kernel de Linux permite una memoria súper distribuida. Por ejemplo, se pueden asignar un total de 8 G de memoria a 10 procesos con 1 G cada uno. Esto no suele ser un problema. Pero el problema ocurre cuando demasiadas aplicaciones ocupan memoria al mismo tiempo. Hay 8 procesos que ocupan 1G cada uno y los dos procesos restantes tienen problemas.
El servidor corre el riesgo de fallar debido a memoria insuficiente. El servidor corre el riesgo de fallar porque se quedó sin memoria. Para evitar que el servidor alcance este estado crítico, existe un proceso OOM Killer en el kernel. Para evitar que el servidor alcance ese estado crítico, el kernel también contiene un proceso conocido como OOM Killer. El kernel utiliza este proceso asesino para comenzar a matar procesos no esenciales para que el servidor pueda ejecutarse normalmente. El kernel utiliza este proceso para comenzar a eliminar procesos no esenciales para que el servidor pueda permanecer operativo.
Justo cuando crees que nada de esto es un problema, porque OOM Killer solo elimina aquellos que no son esenciales. Esencial, no es un proceso que los usuarios necesiten. Por ejemplo, dos aplicaciones (Apache y MySQL) normalmente se cierran primero porque ocupan mucha memoria. Pero esto provocará que un sitio web se paralice inmediatamente.
Al intentar descubrir por qué un asesino OOM cerró una aplicación o un proceso, hay muchos lugares donde buscar cómo y por qué se cerró un proceso.
$ grep -i kill /var/log/messages*
núcleo del host: Sin memoria: proceso eliminado 5123 (proceso de ejemplo)
La K mayúscula en Killed le indica que el proceso fue cancelado con una señal -9, y esto normalmente es un buen indicador de que el OOM Killer tiene la culpa.
$ free -lh
El -l El interruptor muestra estadísticas de memoria alta y baja y el interruptor -h coloca la salida en gigabytes para facilitar la lectura humana. Puede cambiar esto al interruptor -m si prefiere la salida en megabytes. Al mismo tiempo, este comando brindará información sobre el uso de la memoria de intercambio. Nota: El comando gratuito proporciona los datos en un momento determinado. Debe ejecutarse varias veces para conocer el uso de la memoria dinámica.
$ vmstat -SM 10 20
20 veces, cada vez con un intervalo de 10 segundos para indicar el uso de la memoria.
top muestra el uso de la CPU de forma predeterminada, pero puedes presionar Mayús M después de top y obtendrás el uso de la memoria.
Archivo de configuración/etc/sysctl.conf:
sysctl vm.panic_on_oom=1
sysctl kernel.panic=X
echo "vm.panic_on_oom=1" gt;gt; /etc/sysctl.conf
echo "kernel.panic=X" gt; /etc/sysctl.conf
Grande En la mayoría de los casos, no es apropiado reiniciar cada vez que hay poca memoria.
No solo puede proteger algunos procesos importantes para que no sean eliminados por OMM Killer, sino que también facilita la eliminación de procesos sin importancia:
echo -15 gt /proc/(PID) /oom_adj (no eliminado)
echo 10 gt; /proc/(PID)/oom_adj (más fácil de eliminar)
pstree -p | grep "proceso" | /p>
En algunos casos, los procesos de exención pueden provocar cambios de comportamiento inesperados, dependiendo del sistema y la configuración de los recursos. Si el kernel no puede eliminar un proceso que consume mucha memoria, eliminará otros procesos, incluidos procesos importantes del sistema operativo.
Dado que el rango efectivo de ajuste de OOM Killer está entre -16 y 15, establecerlo en -17 eximirá a un proceso porque está fuera del rango de ajuste de OOM Killer. La regla habitual es que cuanto mayor sea el parámetro, más fácil será eliminarlo. El comando para eximir un proceso es
echo -17 gt /proc/(PID)/oom_adj
<. p> Advertencia: No recomendado en entornos de producción.Si reiniciar, cambiar las prioridades del proceso y eximir un proceso no son suficientes, existe una opción arriesgada: desactivar la función Aom Killer.
Este parámetro de opción tendrá los siguientes efectos:
4.1) Pánico grave del kernel Pánico del kernel
4.2) Cuelgue del sistema
4.3) Una caída completa del sistema caída del sistema
¿Por qué es riesgoso apagarlo? Esta característica evita que te quedes sin recursos. Si desactiva esta función, no evitará el agotamiento de la memoria. Tenga extrema precaución al considerar esto.
sysctl vm.overcommit_memory=2
echo “vm.overcommit_memory=2” gt; /etc/sysctl.conf