Creo que no es un problema tan infrecuente: un proceso asigna cantidades masivas de memoria (ya sea debido a un error de pérdida de memoria, porque intentas procesar un archivo de entrada demasiado grande, o lo que sea). La RAM se llena, y en algún momento Linux tiene que cambiar para intercambiar. Bueno, a veces este es solo el último recurso: si tengo un cálculo costoso, no quiero perder datos si al final me quedo sin RAM.
Sin embargo, más a menudo (en mi experiencia), el consumo de memoria no tiene límites, debido a un proceso deshonesto, quizás con errores. Es decir, no solo termino con algunos datos menos urgentes que se necesitan mover para intercambiar, sino que el sistema operativo se ve obligado a intercambiar cargas de datos de forma pánico. Y eso desafortunadamente no solo rompe en gran medida el proceso ofensivo, sino que puede detener casi todo el sistema (ya no es tan malo en máquinas con SSD, pero OTOH me preocupa si escribir gigabytes y gigabytes de datos basura puede A largo plazo dañar las células flash).
Hasta que note el problema y elimine manualmente el proceso (¡una vez que en realidad me tomó minutos hasta que incluso logré iniciar sesión en un terminal virtual!), La mitad de mi sesión de ejecución está en intercambio, y necesito esperar un buen rato hasta que el sistema funcione sin problemas otra vez.
Hay una solución draconica al problema: imponer un límite de memoria rígida. Pero hacer esto en todo el sistema a veces mataría procesos que aún necesito, y si tengo que hacerlo manualmente ulimit
antes de comenzar un proceso ofensivo ... bueno, a menudo lo olvidaré hasta que sea demasiado tarde.
Posibles tipos de solución con los que estaría más feliz:
- Si algún proceso excede cierto uso de memoria, se reduce artificialmente para que el resto del sistema responda.
- Si algún proceso excede un cierto uso de memoria, es
SIGSTOP
ped, así que tengo tiempo para averiguar qué hacer a continuación. - Si un proceso se acerca al límite de RAM, recibo una advertencia, antes de que comience el gran intercambio.
¿Hay alguna forma de obtener tal comportamiento o similar?
ulimit
.