Tengo una máquina Linux bastante antigua con 2 GB de RAM, sin intercambio, y está funcionando muy bien, con el sistema utilizando cada pieza de memoria no utilizada para el almacenamiento en caché con gran efecto.
Sin embargo, cuando estoy a punto de estresar la memoria (p. Ej.,> 1950 MB asignados), se ralentiza; Sospecho que es porque no quedan buffers de disco. Sé que el asesino OOM pronto entraría en vigencia, pero generalmente no llega allí: se está volviendo tan lento que carga los brotes a 30-40, ningún proceso avanza (por lo tanto, no asigna más memoria) y Tengo que reiniciarlo.
Cuando trato de matar un solo proceso para que la máquina responda, por ejemplo, yendo a la consola (a través de Alt-F1, iniciando sesión y simplemente haciendo un "proceso incorrecto de Killall"), generalmente funciona, excepto que tengo que esperar ~ 10 minutos entre usuario / contraseña y obtener un mensaje, todo mientras haya actividad en el disco.
Una vez más, no hay intercambio, por lo que no se está intercambiando, solo se está agitando porque no le quedan buffers.
Tendría mucho más de 100 MB dedicados exclusivamente a los búferes de disco, lo que desencadenaría el asesino OOM antes (menos memoria para los programas, después de todo), pero por otro lado dejaría la máquina receptiva en todo momento.
¿Hay una manera de hacerlo? No he podido encontrar una entrada / proc / kernel o / sys / vm que haga este tipo de cosas.
Respuestas:
Echa un vistazo a / proc / sys / vm / min_free_kbytes . Es el límite de kbytes libres lo que desencadena al asesino. También sería bueno comprobar en los registros para la palabra clave oom-asesino con el fin de saber lo que se maten {además probablemente usted no desea matar a ssh , que es mejor renice it}
fuente
Esperar a que el oom-killer libere memoria es un poco como esperar a que el motor se detenga en su automóvil para decirle cuándo es el momento de llenar su tanque de gasolina. El asesino de Oom es una herramienta de mano dura de último recurso y desesperación por una máquina que carece de recursos. Mata el siguiente programa que toca sin tener en cuenta cómo afectará esto a su aplicación, accesibilidad, confiabilidad, etc. Cuando se invoca el oom-killer, su servidor está sin aliento y en estado crítico.
En cambio, es mucho mejor adoptar un enfoque activo para administrar el uso de memoria dentro del entorno de su aplicación. Puede monitorear / proc / meminfo en busca de problemas y tomar las medidas adecuadas y acelerar su carga de trabajo antes de que una situación grave se ponga fea.
fuente
oom_adj
correctamente, puede hacer que su sistema de escritorio funcione un poco como Android, donde el sistema prácticamente siempre se ejecuta contra el asesino OOM (técnicamente hay un "asesino de poca memoria" y se ajusta a través de/sys/module/lowmemorykiller
). La lógica es marcar continuamente los procesos de fondo no críticos como víctimas potenciales para el asesino OOM y buscar procesos muertos y reiniciar lentamente los programas muertos necesarios para evitar sobrecargar el sistema. Solo asegúrese de que el proceso que sigue reiniciando otros procesos esté marcado fuera de los límites para OOM killer.