Uso de memoria
SecureVu incluye perfilado de memoria integrado usando memray para ayudar a diagnosticar problemas de memoria. Esta función te permite perfilar módulos específicos de SecureVu para identificar fugas de memoria, asignaciones excesivas u otros problemas relacionados con la memoria.
Habilitar el perfilado de memoria
El perfilado de memoria se controla mediante la variable de entorno SECUREVU_MEMRAY_MODULES. Establécela en una lista separada por comas de los nombres de módulos que deseas perfilar:
# ejemplo de docker-compose
services:
securevu:
...
environment:
- SECUREVU_MEMRAY_MODULES=securevu.embeddings,securevu.capture
# ejemplo de docker run
docker run -e SECUREVU_MEMRAY_MODULES="securevu.embeddings" \
...
--name securevu <securevu_image>
Nombres de módulos
Los procesos de SecureVu se nombran usando un esquema de nomenclatura basado en módulos. Los nombres de módulos comunes incluyen:
securevu.review_segment_manager- Procesamiento de segmentos de revisiónsecurevu.recording_manager- Gestión de grabacionessecurevu.capture- Procesos de captura de cámara (todas las cámaras con este nombre de módulo)securevu.process- Procesamiento/seguimiento de cámara (todas las cámaras con este nombre de módulo)securevu.output- Procesamiento de salidasecurevu.audio_manager- Procesamiento de audiosecurevu.embeddings- Procesamiento de embeddings
También puedes especificar el nombre completo del proceso (incluidos los identificadores específicos de la cámara) si deseas perfilar una cámara específica:
SECUREVU_MEMRAY_MODULES=securevu.capture:front_door
Cuando especificas un nombre de módulo (p. ej., securevu.capture), se perfilarán todos los procesos con ese prefijo de módulo. Por ejemplo, securevu.capture perfilará todos los procesos de captura de cámara.
Cómo funciona
-
Creación de archivo binario: Cuando el perfilado está habilitado, memray crea un archivo binario (
.bin) en/config/memray_reports/que se actualiza continuamente en tiempo real mientras el proceso se ejecuta. -
Generación automática de HTML: Al salir normalmente del proceso, SecureVu automáticamente:
- Detiene el seguimiento de memray
- Genera un informe HTML de flamegraph
- Lo guarda en
/config/memray_reports/<nombre_modulo>.html
-
Recuperación tras fallo: Si un proceso falla (SIGKILL, fallo de segmento, etc.), el archivo binario se conserva con todos los datos hasta el punto del fallo. Puedes generar manualmente el informe HTML a partir del archivo binario.
Ver informes
Informes automáticos
Después de que un proceso salga normalmente, encontrarás informes HTML en /config/memray_reports/. Abre estos archivos en un navegador web para ver flamegraphs interactivos que muestran los patrones de uso de memoria.
Generación manual de informes
Si un proceso falla o deseas generar un informe a partir de un archivo binario existente, puedes crear manualmente el informe HTML:
- Ejecuta
memraydentro del contenedor de SecureVu:
docker-compose exec securevu memray flamegraph /config/memray_reports/<nombre_modulo>.bin
# o
docker exec -it <nombre_o_id_contenedor> memray flamegraph /config/memray_reports/<nombre_modulo>.bin
- También puedes copiar el archivo
.binal host y ejecutarmemraylocalmente si lo tienes instalado:
docker cp <nombre_o_id_contenedor>:/config/memray_reports/<nombre_modulo>.bin /tmp/
memray flamegraph /tmp/<nombre_modulo>.bin
Comprender los informes
Los flamegraphs de Memray muestran:
- Asignaciones de memoria a lo largo del tiempo: Ve dónde se está asignando memoria en tu código
- Pilas de llamadas: Comprende la cadena completa de llamadas que lleva a las asignaciones
- Puntos calientes de memoria: Identifica funciones o rutas de código que asignan más memoria
- Fugas de memoria: Detecta patrones donde se asigna memoria pero no se libera
Los informes HTML interactivos te permiten:
- Acercar a rangos de tiempo específicos
- Filtrar por nombres de función
- Ver información detallada de asignación
- Exportar datos para análisis adicional
Buenas prácticas
-
Perfilar durante los problemas: Habilita el perfilado cuando estés experimentando problemas de memoria, no todo el tiempo, ya que añade cierta sobrecarga.
-
Perfilar módulos específicos: En lugar de perfilar todo, céntrate en los módulos que sospechas que están causando problemas.
-
Deja correr los procesos: Permite que los procesos se ejecuten durante un tiempo significativo para capturar patrones de uso de memoria representativos.
-
Revisa los archivos binarios: Si los informes HTML no se generan automáticamente (p. ej., después de un fallo), busca archivos
.binen/config/memray_reports/y genera los informes manualmente. -
Compara informes: Genera informes en diferentes momentos para comparar los patrones de uso de memoria e identificar tendencias.
Solución de problemas
No se generan informes
- Comprueba que la variable de entorno esté establecida correctamente
- Verifica que el nombre del módulo coincida exactamente (distingue mayúsculas y minúsculas)
- Revisa los registros para ver errores relacionados con memray
- Asegúrate de que el directorio
/config/memray_reports/exista y sea escribible
El proceso falló antes de la generación del informe
- Busca archivos
.binen/config/memray_reports/ - Genera manualmente los informes HTML usando:
memray flamegraph <archivo>.bin - El archivo binario contiene todos los datos hasta el punto del fallo
Los informes no muestran datos
- Asegúrate de que el proceso se haya ejecutado el tiempo suficiente para generar datos significativos
- Comprueba que memray esté correctamente instalado (incluido por defecto en SecureVu)
- Verifica que el proceso realmente se haya iniciado y ejecutado (revisa los registros del proceso)
Para más información sobre memray e interpretación de informes, consulta la documentación oficial de memray.