Saltar al contenido principal

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ón
  • securevu.recording_manager - Gestión de grabaciones
  • securevu.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 salida
  • securevu.audio_manager - Procesamiento de audio
  • securevu.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

  1. 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.

  2. 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
  3. 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 memray dentro 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 .bin al host y ejecutar memray localmente 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

  1. Perfilar durante los problemas: Habilita el perfilado cuando estés experimentando problemas de memoria, no todo el tiempo, ya que añade cierta sobrecarga.

  2. Perfilar módulos específicos: En lugar de perfilar todo, céntrate en los módulos que sospechas que están causando problemas.

  3. Deja correr los procesos: Permite que los procesos se ejecuten durante un tiempo significativo para capturar patrones de uso de memoria representativos.

  4. Revisa los archivos binarios: Si los informes HTML no se generan automáticamente (p. ej., después de un fallo), busca archivos .bin en /config/memray_reports/ y genera los informes manualmente.

  5. 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 .bin en /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.