Estoy haciendo algunas pruebas de rendimiento serias en el analizador de archivos binarios que estoy escribiendo en el trabajo. Después de implementar el multiprocesamiento para acelerar en gran medida el análisis, me concentré en reducir la huella de la memoria, que puede ser importante con cientos de miles de archivos. Entonces, ayer configuré un generador de perfiles de memoria Python de muy baja tecnología (Ejecutar la lista de tareas como un comando del sistema, redirigido a un archivo, leer y analizar el archivo) y configurarlo para que funcione para ver si tuve alguna pérdida de memoria que se acumuló lentamente hora. Aquí están los resultados.
La respuesta a mi pregunta parece ser no, o al menos no apreciable. (Guarda los resultados en un archivo de almacenamiento cada pocos miles, de ahí el patrón de diente de sierra) Pero, obviamente, lo primero que noté fue el salto de 900 MB, que ocurrió en algún momento dentro de un intervalo de aproximadamente 90 segundos. Me recordó otra ocurrencia que grabé la primera vez que hice esta prueba de alto volumen:
Solo a la inversa, por supuesto. En ambas ocasiones hay un salto de casi 1 GB en el uso de la memoria. Esto no parece tener nada que ver con mi programa, por lo que probablemente no debería preocuparme demasiado por ello. Pero, ¿alguien sabe qué podría estar causando esto?
ACTUALIZACIÓN: volví a ejecutar la sesión de análisis masivo, mantuve registros regulares de la lista de tareas, monitoreé el uso de RAM y usé RamMap. La lista de tareas no encontró nada inusual que pudiera explicar el uso progresivo de RAM. (El gráfico de Excel no encuentra nada) Pero usando RamMap creo que encontré al culpable. Al observar las instantáneas de mi uso de memoria antes y después de la discontinuidad masiva (que sucedió justo cuando mi programa salió esta vez), vi que la categoría "Archivo mapeado" estaba usando toda la memoria extra. Específicamente, el archivo temporal que estaba creando mi programa (que había crecido a más de 1 GB) dominaba el uso de memoria de esta categoría; en la pestaña "Resumen de archivos" estaba usando más de 1 GB. Modifiqué mi programa para guardar resultados en este archivo específicamente para evitar el uso de memoria excesiva, por lo que es lamentable que todavía lo sea de alguna manera. ¿Es esto porque no estaba cerrando el archivo entre usos? ¿Abrirlo siempre cargará todo en la memoria? (Fue creado con el módulo de estantería de Python para almacenar datos mapeados) Esto probablemente todavía no responde a la pregunta de qué sucedió en el gráfico de Excel, pero es un problema que he estado tratando toda la semana.
fuente