El kernel de Linux proporciona cierto grado de flexibilidad en lo que respecta a la asignación de memoria. Un parámetro sysctl, vm.overcommit_memory, controla cómo el kernel maneja situaciones en las que los procesos solicitan más memoria de la que está físicamente disponible. Cuando se establece en 0 o 1, el kernel permite “sobrecompromiso”, esencialmente permitiendo que los programas asignen más memoria de la que existe. Esto puede llevar a una situación crítica si la memoria asignada se utiliza por completo, ya que el sistema puede quedarse sin recursos físicos.

Compromiso excesivo y agotamiento de la memoria

Cuando la memoria se agota, la estabilidad de todo el sistema se ve amenazada. Los procesos podrían fallar, los servicios esenciales podrían fallar y el rendimiento general se degradaría drásticamente. Para evitar esto, el kernel de Linux emplea un mecanismo conocido como Out of Memory (OOM) Killer.

El proceso de toma de decisiones del asesino de OOM

La función principal de OOM Killer es finalizar procesos de forma selectiva para liberar suficiente memoria para que el sistema funcione.  El desafío radica en elegir el “mejor” proceso para eliminar: el que liberará la mayor cantidad de memoria y causará una interrupción mínima.

Puntuación OOM: Para tomar esta decisión, el kernel asigna un oom_score a cada proceso. Esta puntuación se puede ver en el sistema de archivos /proc dentro del directorio de ID del proceso. Cuanto mayor sea el oom_score, más probabilidades habrá de que el proceso finalice durante una situación OOM.

  Meta lanza silenciosamente Forum, una aplicación independiente para Grupos de Facebook

Cálculo de la puntuación OOM: en los kernels de Linux modernos, oom_score se calcula como un porcentaje simple de la memoria disponible que está utilizando el proceso.

  1. Si todo el sistema tiene poca memoria, la “memoria disponible” es el total de RAM y espacio de intercambio.
  2. Si la escasez se produce dentro de un grupo de control específico (cgroup), la “memoria disponible” es la cantidad asignada a ese cgroup.
  3. Matices de puntuación: el cálculo da como resultado un número entre 0 (sin utilizar memoria) y 1000 (utilizando toda la memoria disponible). Hay ajustes menores:
  4. Los procesos de propiedad raíz tienen su puntuación ligeramente reducida, ya que a menudo se consideran más importantes.
  5. Se puede agregar la variable oom_score_adj (ajustable mediante /proc), lo que permite a los usuarios influir en el atractivo de un proceso para OOM Killer.
  Se rumorea que el precio del Claude Sonnet 5 rebaja el del Opus 4.5 en un 50%

Implicaciones y consideraciones

Comprender el comportamiento de OOM Killer es crucial para los administradores y desarrolladores de sistemas. Al monitorear el uso de la memoria de los procesos y los valores de oom_score, puede obtener información sobre cómo podría reaccionar el sistema bajo la presión de la memoria. Tenga en cuenta que OOM Killer es el último recurso. Está diseñado para mitigar fallas catastróficas, pero los procesos de eliminación aún pueden tener consecuencias negativas.

Medidas proactivas

  1. Optimice las aplicaciones: asegúrese de que su software esté bien escrito y no consuma demasiada memoria.
  2. Supervisar el uso de la memoria: verifique periódicamente el uso de la memoria en todo el sistema y las estadísticas de procesos individuales.
  3. Establecer límites de memoria: considere utilizar cgroups u otros mecanismos para establecer límites en el uso de memoria por proceso o grupo de procesos.
  Samsung producirá chips de conducción autónoma de 8 nm para Hyundai

Linux OOM Killer juega un papel crucial en el mantenimiento de la estabilidad del sistema durante la escasez crítica de memoria. Su proceso de toma de decisiones, aunque complejo, tiene como objetivo minimizar el daño seleccionando los procesos más prescindibles. Al comprender cómo funciona OOM Killer y tomar medidas proactivas para administrar el uso de la memoria, puede reducir la probabilidad de encontrar situaciones OOM y garantizar un funcionamiento más fluido y confiable del sistema.