Al investigar un poco, descubrí que es posible ajustar o incluso hacer que ciertos procesos sean inmunes contra el asesino de OOM ingresando un valor en /proc/pid/oom_adj. Por supuesto, necesito encontrar pid para mi proceso usando pidof o pgrep o algo así y crear un script que ejecuto una vez que todos mis procesos estén en funcionamiento.
El problema con el asesino OOM es como con cualquier otro asesino. Puede parecer cuerdo y racional en la superficie, pero en el fondo están, de hecho, seriamente perturbados, bastante locos y, a menudo, incapaces de emitir un juicio correcto.
Ahora, personalmente, no me importa matar un poco, siempre y cuando sepa lo que está pasando y tenga cierto control sobre las víctimas (tranquilos amigos, estoy hablando de cosas informáticas), así que estoy buscando una mejor manera de proteger. ciertos procesos contra el temido asesino OOM para no tener que ejecutar un script cada vez que se ejecutan todos mis programas o cada vez que inicio un nuevo programa. ¿Alguna idea sobre cómo lograr esto fácilmente?
Respuesta1
No deberías confiar en OOM Killer para gestionar tus procesos. OOM Killer es una medida de último recurso, cuando la única otra alternativa es un fallo del sistema. Por ejemplo, toda la memoria caché y buffers de disco se vaciaron y confirmaron, todo lo que se puede intercambiar/descartar se procesa y aún no tiene suficiente memoria... Obviamente no desea que su sistema en ejecución llegue nunca a este estado.
Debido a las estrictas restricciones bajo las que opera OOM Killer (no puede asignar más memoria, no puede intercambiar otros procesos, etc.),voluntadElimine los procesos que no desea que eliminen para aliviar la presión de la memoria.
Creo que si su sistema simplemente no tiene suficiente memoria, necesita agregar más memoria o intercambiar espacio, dependiendo de si se está quedando sin memoria física o sin memoria virtual total.
Si, por otro lado, tienes algunos procesos fuera de control que consumen demasiada memoria de vez en cuando, debido a una pérdida de memoria o algún otro error, puedes controlarlo a través de otros medios:
Establezca
ulimit -m
antes de iniciar el proceso infractor y limite la cantidad de memoria que ese proceso puede asignar.Reinicie el proceso ofensivo correctamente según una programación a través de cron, si hay una pérdida de memoria y es bastante predecible.
En cualquier caso, el asesino de OOM no es tu amigo, es un arma suelta :-/