Trabajo en conjuntos de datos a gran escala. Al probar un nuevo software, algunas veces un script se me escapa, toma rápidamente toda la RAM disponible y deja mi escritorio inutilizable. Me gustaría una forma de establecer un límite de RAM para un proceso para que si excede esa cantidad, se eliminará automáticamente. Una solución específica del idioma probablemente no funcionará, ya que utilizo todo tipo de herramientas diferentes (R, Perl, Python, Bash, etc.).
Entonces, ¿hay algún tipo de monitor de proceso que me permita establecer una cantidad umbral de RAM y eliminar automáticamente un proceso si usa más?
Respuestas:
Odio ser el tipo que responde a su propia pregunta, pero esta mañana encontré un método alternativo, envuelto en una pequeña y agradable utilidad. Limitará el tiempo de CPU o el consumo de memoria:
https://github.com/pshved/timeout
Primero le doy una oportunidad a este, pero vota a Amey Jah por la buena respuesta. Lo comprobaré si este me falla.
fuente
Recomiendo encarecidamente que no lo haga . Según lo sugerido por @chrisamiller, la configuración de ulimit limitará la RAM disponible con el proceso.
Pero aún así, si insiste, siga este procedimiento.
Guarde el siguiente script como
killif.sh
:Ahora hazlo ejecutable.
Ahora ejecute este script en la terminal. Reemplace
PROCID
con la identificación del proceso real ySIZE
con el tamaño en MB.Por ejemplo:
Si
SIZE
es 100, el proceso se eliminará si su uso de RAM supera los 100 MB.Precaución: sabes lo que estás tratando de hacer. El proceso de matar no es una buena idea. Si ese proceso tiene algún comando de apagado o detención, edite el script y reemplace el
kill -9
comando con eseshutdown
comando.fuente
Prueba la
prlimit
herramienta, desdeutil-linux
paquete. Ejecuta un programa con límites de recursos. Utiliza laprlimit
llamada del sistema para establecer los límites, que luego son aplicados exclusivamente por el núcleo.Puede configurar 16 límites, que incluyen:
fuente
Esto era demasiado grande para un comentario. Modifiqué el script original de Amey para incluir a
pgrep
, por lo que en lugar de tener que ingresar manualmente la identificación del proceso, puede excluir por nombre. Por ejemplo,./killIf.sh chrome 4000
mata cualquier proceso de Chrome que exceda los 4 GB en uso de memoria.Tenga cuidado de seleccionar una cadena grep estrecha y un límite de memoria lo suficientemente grande como para no matar innecesariamente procesos no deseados.
fuente