Estoy desarrollando una aplicación en Python en Ubuntu y estoy ejecutando binarios externos desde dentro de python usando un subproceso. Dado que estos binarios se generan en tiempo de ejecución y pueden ir deshonestos, necesito mantener una pestaña estricta sobre la cantidad de huella de memoria y el tiempo de ejecución de estos binarios. ¿De alguna manera puedo limitar o controlar el uso de memoria de estos programas binarios en tiempo de ejecución? Realmente odiaría usar algo como "ps" en subproceso para este propósito.Comprobar el uso de memoria del subproceso en Python
Respuesta
Con un número PID de su subproceso, puede leer toda la información de proc file-system. Uso:
/proc/[PID]/smaps (desde Linux 2.6.14 ) Este archivo muestra el consumo de memoria para cada una de las asignaciones del proceso. Para cada una de las asignaciones hay una serie de líneas como sigue:
o
/proc/[PID]/statm Proporciona información sobre el uso de memoria, medida en páginas.
Alternativamente, puede limitar los recursos, que se puede adquirir con el subproceso:
subprocess.Popen('ulimit -v 1024; ls', shell=True)
Cuando se administra límite de memoria virtual se alcanzó proceso falla con sin memoria.
Puede usar el módulo resource de Python para establecer los límites antes de generar su subproceso.
Para la supervisión, resource.getrusage() le dará información resumida sobre todos sus subprocesos; si desea ver información por subproceso, puede hacer el truco/proc en ese otro comentario (no portátil pero efectivo), o aplicar un programa Python entre cada subproceso y descubrir alguna comunicación (portátil, feo, levemente efectivo)
gracias Habbie, eso es exactamente lo que necesitaba. – Neo
- 1. Uso del comodín del subproceso de Python
- 2. Cómo reducir el uso de memoria del código python enhebrado?
- 3. Uso de la memoria del diccionario Python
- 4. Uso de memoria de subproceso o proceso en Java
- 5. Devuelve el valor del subproceso de Python
- 6. Perfil Python Uso de CPU por subproceso
- 7. Uso de la memoria del diccionario en Python?
- 8. Lectura sin búfer del proceso mediante el subproceso en Python
- 9. Uso del subproceso para ejecutar el script de Python en Windows
- 10. ¿Gran uso de memoria del módulo json de Python?
- 11. Salida del subproceso Python en Windows?
- 12. Comprobar si el subproceso está en el contexto Gui
- 13. sustitución del subproceso de popen2 con Python
- 14. Uso de memoria del Playframework
- 15. ¿Disminuye el uso de CPU/memoria de un subproceso en Java?
- 16. ¿Cómo perfilo el uso de la memoria en Python?
- 17. python: lectura del resultado del subproceso en hilos
- 18. Interbloqueo en el subproceso de Python popen
- 19. Optimizar el uso de memoria en numpy
- 20. Uso de memoria de Python con BeautifulSoup
- 21. Usar el módulo de subproceso Python 2.6 en Python 2.5
- 22. Subproceso de python persistente
- 23. subproceso python que utiliza el subproceso de importación
- 24. Subproceso de Python en paralelo
- 25. python getoutput() equivalente en el subproceso
- 26. argumentos de Python subproceso
- 27. uso de CPU de subproceso múltiple en C#
- 28. Qué es un subproceso de python
- 29. Uso del ancho de banda de memoria
- 30. Python subproceso de Bash: llaves
Necesito implementar esto desde dentro de Python. Por lo tanto, necesitaría bifurcar un proceso hijo y, al mismo tiempo, ejecutar un ciclo while que mantiene el archivo de monitoreo/proc/(pid)/smaps. ¿No hay alguna otra forma, por ejemplo: puedo asignar memoria fija para un subproceso secundario? Esperaba usar el administrador de memoria de Python de alguna manera. – Neo
Dang, nunca pensé en esto. Sí, esto debería funcionar bien para mí. – Neo
ulimit está obsoleto. Extracto de la página man: "Advertencia: esta rutina está obsoleta. Use getrlimit (2), setrlimit (2) y sysconf (3)". – omikron