python - usage - Cómo limitar el tamaño del montón?
python memory usage (2)
Eche un vistazo a ulimit . Permite establecer cuotas de recursos. Puede necesitar configuraciones apropiadas de kernel también.
A veces escribo programas de Python que son muy difíciles de determinar cuánta memoria usará antes de la ejecución. Como tal, a veces invoco un programa de Python que intenta asignar cantidades masivas de RAM causando que el kernel intercambie en gran medida y degrade el rendimiento de otros procesos en ejecución.
Debido a esto, deseo restringir cuánta memoria puede crecer un montón de Python. Cuando se alcanza el límite, el programa simplemente se bloquea. ¿Cuál es la mejor manera de hacer esto?
Si es importante, se escribe mucho código en Cython, por lo que debe tener en cuenta la memoria asignada allí. No estoy casado con una solución pura de Python (no es necesario que sea portátil), por lo que todo lo que funciona en Linux está bien.
Echa un vistazo a resource.setrlimit() . Solo funciona en sistemas Unix, pero parece que podría ser lo que está buscando, ya que puede elegir un tamaño máximo de almacenamiento dinámico para su proceso y los elementos secundarios de su proceso con el parámetro resource.RLIMIT_DATA.
EDITAR: Agregar un ejemplo:
import resource
rsrc = resource.RLIMIT_DATA
soft, hard = resource.getrlimit(rsrc)
print ''Soft limit starts as :'', soft
resource.setrlimit(rsrc, (1024, hard)) #limit to one kilobyte
soft, hard = resource.getrlimit(rsrc)
print ''Soft limit changed to :'', soft
No estoy seguro de cuál es tu caso de uso exactamente, pero es posible que necesites poner un límite en el tamaño de la pila en lugar de resouce.RLIMIT_STACK. Pasar este límite enviará una señal SIGSEGV a su proceso, y para manejarlo necesitará usar una pila de señal alternativa como se describe en la página de manual de Setrlimit Linux. No estoy seguro de si sigaltstack se implementa en Python, por lo que podría ser difícil si desea recuperarse de ir más allá de este límite.