Intento ajustar mi sistema de desarrollo para obtener la máxima fiabilidad. Inhabilité el intercambio, porque para el uso de la GUI hace que la máquina deje de responder de tal manera que ya no se pueda usar. Sin embargo, si las aplicaciones agresivas consumen la memoria, algunos mecanismos parecen ayudar a aprovechar el costo de la velocidad. No hay operación de intercambio de disco duro, pero el sistema no responde de la misma manera. Así que quiero dejar que el asesino de OOM entre en acción antes de que el sistema haga ningún esfuerzo especial en la ganancia de memoria. ¿Es posible configurar el asesino OOM para que actúe si hay menos de 100 MB de memoria física libre, por ejemplo?
linux-kernel
memory-management
Dronus
fuente
fuente
Respuestas:
También luché con ese problema. Solo quiero que mi sistema permanezca receptivo, pase lo que pase, y prefiero perder procesos que esperar unos minutos. Parece que no hay forma de lograr esto usando el kernel oom killer.
Sin embargo, en el espacio del usuario, podemos hacer lo que queramos. Así que escribí el Early OOM Daemon ( https://github.com/rfjakob/earlyoom ) que matará el proceso más grande (por RSS) una vez que la RAM disponible sea inferior al 10%.
Sin Earlyoom, ha sido fácil bloquear mi máquina (8 GB de RAM) iniciando http://www.unrealengine.com/html5/ varias veces. Ahora, las pestañas del navegador culpables se matan antes de que las cosas se salgan de control.
fuente
earlyoom
ahora, funciona bien en una primera prueba de activación. Me pregunto por qué esto no puede implementarse mediante la configuración del kernel o las herramientas del sistema.La política predeterminada del núcleo es permitir que las aplicaciones sigan asignando memoria virtual siempre que haya memoria física libre. La memoria física no se usa realmente hasta que las aplicaciones tocan la memoria virtual que asignaron, por lo que una aplicación puede asignar mucha más memoria de la que tiene el sistema, luego comenzar a tocarla más tarde, haciendo que el núcleo se quede sin memoria y active la salida de memoria (OOM) asesino. Sin embargo, antes de que se acabe el proceso de acaparamiento, se ha vaciado el caché del disco, lo que hace que el sistema responda lentamente por un tiempo hasta que el caché se vuelva a llenar.
Puede cambiar la política predeterminada para no permitir la sobrecarga de memoria escribiendo un valor de 2 en
/proc/sys/vm/overcommit_memory
. El valor predeterminado de/proc/sys/vm/overcommit_ratio
es 50, por lo que el núcleo no permitirá que las aplicaciones asignen más del 50% del intercambio ram +. Si no tiene intercambio, entonces el núcleo no permitirá que las aplicaciones asignen más del 50% de su ram, dejando el otro 50% libre para el caché. Eso puede ser un poco excesivo, por lo que es posible que desee aumentar este valor para decir, 85% más o menos, para que las aplicaciones puedan asignar hasta el 85% de su ram, dejando un 15% para el caché.fuente
I disabled swap, because for GUI usage it mostly renders the machine unresponsive in such a way not useable anymore.
. Mencionó la GUI, mientras asumes que ejecuta un comando. Comprar más memoria es la primera solución, usar menos memoria usted mismo es la segunda solución, hacer que su sistema sea inestable al jugar con los valores predeterminados estables es la última solución. La pregunta no tiene que ser respondida literalmente, por lo que no veo cuál es su problema que tienen que molestarnos a los dos en los comentarios. Rant no ayuda .../proc/meminfo
' comoCommitted_AS
estado. Con algunas aplicaciones ejecutándose, este valor excede fácilmente la memoria física, por lo que es difícil establecer un límite factible con esto.Para mí, configurar vm.admin_reserve_kbytes = 262144 hace exactamente esto. El asesino OOM interviene antes de que el sistema deje de responder por completo.
fuente
Las otras respuestas tienen buenas soluciones automáticas, pero creo que puede ser útil también habilitar la
SysRq
clave para cuando las cosas se salgan de control. Con laSysRq
clave, estaría enviando mensajes manualmente al núcleo, y puede hacer cosas como reiniciar de forma segura (conSysRQ + REISUB
) incluso si el espacio de usuario se ha congelado por completo.Para permitir que el núcleo escuche solicitudes, configure
kernel.sysrq = 1
o habilite solo las funciones que probablemente usará con una máscara de bits (documentado aquí ). Por ejemplokernel.sysrq = 244
, habilitará todos los combos necesarios para el reinicio seguro anterior, así como la invocación manual del asesino OOM conSysRq + F
.fuente
La fiabilidad no se alcanza con condiciones de poca memoria y un asesino OOM.
Está mal organizar una fiesta en un armario y colocar "limpiar mi armario" en tu pequeña lista de reproducción.
Hacer esto tendrá resultados secundarios no deseados, ya que no tienes control sobre lo que se mata.
La confiabilidad máxima implica probar su sistema y mejorar su sistema basado en estas pruebas.
Simplemente ajustar cosas al azar no te llevará a ninguna parte ...
Debido a las condiciones de poca memoria, deshabilitar el intercambio no mejorará el comportamiento , hace lo contrario .
Para aumentar la confiabilidad en esta situación, agregue más memoria de manera que su sistema responda mejor y no se eliminen procesos aleatorios sin la intención del usuario. No debe recurrir a condiciones de poca memoria y un mecanismo como este, especialmente no en un entorno de desarrollo ...
Las condiciones de poca memoria resultan en la falta de respuesta, ya sea que tenga un intercambio o no.
Esfuerzos especiales que harán más daño que bien, como expliqué anteriormente. En cambio, podría matar procesos que no necesita, pero supongo que no puede hacerlo, por lo que la OOM matará los procesos que necesita.
Puede ser, pero obtienes un mayor retorno de la inversión si solo compras un poco de memoria extra que realmente no cuesta mucho en estos días. Tenga en cuenta que a la larga se va a golpear en el pie si continúa trabajando en condiciones de poca memoria. OOM es como un agente judicial, no te ayuda, ayuda al sistema operativo ...
fuente
kill
tipeo a ciegas.