Tengo un eeePC 900a: tiene un flash de 8GB como disco y solo 1GB de RAM. La distribución de Linux instalada en él es ArchLinux.
Cuando el sistema se queda sin memoria, deja de responder: lleva varios segundos / minutos hacer cosas como cambiar a TTY1 o incluso mover el puntero del mouse. A veces parece que el sistema se congela: hace tres años, lo dejé solo y nada ha cambiado hasta ahora.
Prefiero evitar crear una partición / archivo de intercambio en este eeePC ya que el disco ya es tan pequeño, y también porque las muchas escrituras en el espacio de intercambio acortarían mucho la vida útil de la tarjeta flash. Además, creo que un archivo / partición de intercambio simplemente movería el problema, en lugar de solucionarlo definitivamente.
¿No se supone que el núcleo mata algunas aplicaciones aleatorias cuando se queda sin memoria? ¿Por qué falla (o tarda años) en hacer eso?
Hace unos meses / años ya intenté profundizar en esto, pero no pude encontrar nada que realmente funcionara ...
while(true){ if( $FREE_MEMORY<10MB ){ kill -9 $RANDOM_PID; } }
. Esto definitivamente solucionaría mi problema. Pero espera, ¿no se supone que el kernel haga eso (y de una manera mucho mejor que mi script)? ¿Por qué no está haciendo su trabajo?Respuestas:
Es posible llamar a OOM-killer (asesino sin memoria) directamente por combinación de teclado:
SysRq-F
La tecla SysRq generalmente se combina dentro de la tecla PrtSc en los teclados.
OOM-killer mata algunos procesos (-es) y el sistema vuelve a responder.
Thx Raman por consejos sobre esta característica 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 codicioso de memoria. Pero debe tener en cuenta que OOM-killer podría matar algún proceso realmente importante, úselo con cuidado.
fuente
PrtScn|SysRq
. Pero al presionarSysRq - F
solo se obtiene una captura de pantallaEl 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:
En un sistema típico, una parte importante de la RAM se dedica a la memoria caché y los búferes (el 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. Mientras 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 más información sobre este tema, vea esta discusión de 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. Podría 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 garantizo su caso particular.
fuente
ld
, pedazo de basura), todavía se cuelga durante casi un minuto, despertando lo suficiente como para permitirme mover el mouse increíblemente lento por un segundo o dos cada varios segundos. El manejo de OOM de Linux es una completa basura. Si tengo suerte, el asesino OOM mata el proceso correcto sin arruinar el entorno de escritorio por completo. Y soy un gran admirador de Linux. Es mucho peor con la paginación habilitada. La paginación de Linux es una broma.Este es un error conocido desde 2007: consulte Congelación del sistema en uso de memoria alta .
En esta situación, Windows muestra un cuadro de diálogo que advierte al usuario que cierre una o más aplicaciones.
fuente
Recientemente encontré una solución a mi problema.
Como el asesino OOM de Linux no puede hacer su trabajo correctamente, comencé a usar un asesino OOM del espacio de usuario: earlyoom . Está escrito en C, bastante configurable y funciona a las mil maravillas.
También escuché sobre algunas alternativas, como la OOMD de Facebook , desarrollada para ejecutarse en sus servidores, pero no he probado esta.
fuente