GNU/Linux >> Tutoriales Linux >  >> Linux

El sistema se bloquea cuando se queda sin memoria

Es posible llamar a OOM-killer (asesino sin memoria) directamente mediante una combinación de teclado:

SysRq-F

La tecla SysRq generalmente se combina dentro de la tecla PrtSc en los teclados.

OOM-killer elimina algunos procesos y el sistema vuelve a responder.

Gracias a Raman por sus consejos sobre esta función en los comentarios anteriores.

PD:Esto me ayudó mucho. Estoy de acuerdo con la opinión de que este es el consejo más útil sobre ese problema si es causado por Chrome o cualquier software que consuma memoria. Pero debe tener en cuenta que OOM-killer podría matar algún proceso realmente importante, utilícelo con cuidado.


El estado natural de las cosas es que los datos de la aplicación están en la RAM y los archivos están en el disco.
El estado ideal de las cosas, en cuanto al rendimiento, es que los datos de uso frecuente estén en la RAM y los datos que no se necesitan en este momento estén en el disco.
En un sistema normal, el núcleo hace dos cosas para intentar alcanzar este ideal:

  • Los datos de la aplicación que no se han utilizado durante un tiempo se pueden mover al disco:esto es intercambio.
  • Los datos de los archivos que se usaron recientemente se guardan en la RAM:esta es la memoria caché del disco (para los datos leídos del disco) y los búferes del disco (para los datos que están a punto de escribirse en el disco).

En un sistema típico, una parte significativa de la RAM se dedica a la caché y los búferes (50% es una cifra típica). Dado que la RAM es un recurso finito, esto puede requerir el desplazamiento de algunos datos de la aplicación para intercambiar (el intercambio solo es necesario si hay una mejor manera de usar la RAM).

En un sistema sin intercambio, hay un punto en el que los datos de la aplicación utilizan casi toda la RAM, por lo que apenas queda espacio para la memoria caché. Entonces es probable que el sistema sea lento. El núcleo no comenzará a matar aplicaciones hasta que realmente tenga que hacerlo. Siempre que las aplicaciones solo llenen el 99 % de la memoria disponible, el sistema sigue funcionando, pero muy lentamente porque los datos de los archivos deben cargarse y recargarse desde el disco todo el tiempo. Con las mismas aplicaciones ejecutándose, el sistema sería más rápido con el intercambio en ese punto.

Para obtener más información sobre este tema, consulte esta discusión sobre lkml y esta publicación de blog.

No conozco una forma directa de decirle al kernel que reserve una cantidad mínima de RAM para el caché del disco. Puede configurar una pequeña parte de su RAM como espacio de intercambio, tal vez incluso comprimido. Hay informes de éxito en ese frente, aunque no doy garantías en su caso particular.


Recientemente encontré una solución a mi problema.

Dado que Linux OOM killer no puede hacer su trabajo correctamente, comencé a usar un espacio de usuario OOM Killer:earlyoom. Está escrito en C, bastante configurable y funciona de maravilla para mí.

También he oído hablar de algunas alternativas, como OOMD de Facebook, desarrollada para ejecutarse en sus servidores, pero esta no la he probado


Linux
  1. ¿Cómo evitar que el sistema deje de responder cuando se golpea (fuera de Ram)?

  2. Comprobar la carga del sistema en Linux

  3. Preguntas frecuentes sobre el disco del sistema y el disco de datos

  4. Programa de Python consumiendo RAM

  5. ¿Cómo detecto la especificación del chip de memoria RAM desde una máquina Linux?

Gestión de intercambio en el sistema Linux moderno

Linux:¿el sistema se cuelga cuando se queda sin memoria?

Diagnósticos de poca memoria de Windows

Encuentra el tamaño de RAM en Linux

Linux:averigüe qué proceso está utilizando toda la RAM?

Chrome come toda la RAM y congela el sistema