S7_snap7_Stremer_n_Recorder/PERFORMANCE_MONITORING.md

6.5 KiB
Raw Blame History

Sistema de Monitoreo de Rendimiento

🔍 Objetivo

Monitorear en tiempo real el rendimiento del sistema de recording, detectando automáticamente:

  • Puntos perdidos por retrasos o errores de lectura
  • Estadísticas cada 10 segundos con métricas detalladas
  • Tiempos de respuesta de PLC, CSV y UDP
  • Uso de CPU promedio
  • Errores de lectura/escritura

📊 Métricas Monitoreadas

1. Estadísticas de Puntos

  • Points Saved: Puntos guardados exitosamente en CSV
  • Points Lost: Puntos perdidos por retrasos en el loop
  • Variables Saved: Total de variables guardadas
  • UDP Points Sent: Puntos enviados vía UDP streaming

2. Timing y Performance

  • Read Time: Tiempo de lectura del PLC por dataset
  • CSV Write Time: Tiempo de escritura a archivo CSV
  • Loop Delay: Retraso del loop vs. intervalo esperado
  • CPU Usage: Uso promedio de CPU del proceso

3. Errores y Fallos

  • Read Errors: Errores de lectura del PLC
  • CSV Errors: Errores de escritura CSV
  • UDP Errors: Errores de transmisión UDP
  • Consecutive Errors: Errores consecutivos por dataset

🔥 Logs de Rendimiento

Log Principal (cada 10 segundos)

📊 PERFORMANCE [2025-08-16 15:30:25] | Points: 120/10s (12.0/s) | Variables: 1800 | UDP: 80/10s | CPU: 15.3% | Delay: 0.002s±0.001s | Lost: 0 | Errors: R:0 C:0 U:0

Explicación:

  • Points: 120/10s (12.0/s): 120 puntos guardados en 10s (12 puntos/segundo)
  • Variables: 1800: Total de variables guardadas (120 puntos × 15 variables)
  • UDP: 80/10s: 80 puntos enviados vía UDP
  • CPU: 15.3%: Uso promedio de CPU del proceso
  • Delay: 0.002s±0.001s: Retraso promedio ± desviación estándar
  • Lost: 0: Puntos perdidos
  • Errors: R:0 C:0 U:0: Errores de Read/CSV/UDP

Logs de Advertencia

Puntos Perdidos

⚠️ DATA LOSS: 3 points lost in last 10s (avg delay: 0.150s)
⚠️ POINTS LOST: Dataset 'Fast' - 2 points lost (expected: 0.100s, actual: 0.350s, delay: 0.150s)

Alto Uso de CPU

⚠️ HIGH CPU: 85.5% average CPU usage

Errores de Lectura

⚠️ READ ERRORS: 5 read errors in last 10s

Timing Overrun

⏰ TIMING WARNING: Dataset 'Fast' loop overrun by 0.050s (read: 0.025s, csv: 0.020s, total: 0.150s)

🚨 Detección de Puntos Perdidos

Algoritmo de Detección

# Detecta puntos perdidos cuando:
actual_interval = current_time - last_read_time
expected_interval = dataset_sampling_interval

if actual_interval > expected_interval * 1.5:  # 50% tolerancia
    lost_points = int((actual_interval - expected_interval) / expected_interval)
    # Log warning con detalles

Ejemplo de Detección

Dataset configurado: intervalo = 0.1s (10 puntos/segundo)
Lectura anterior: 15:30:25.000
Lectura actual:   15:30:25.350  (retraso de 0.350s)

Puntos perdidos = (0.350 - 0.100) / 0.100 = 2.5 → 2 puntos perdidos

📈 APIs de Monitoreo

/api/performance/current

Métricas actuales (ventana de 10s activa):

{
  "success": true,
  "current_performance": {
    "points_saved": 45,
    "points_rate": 12.5,
    "variables_saved": 675,
    "udp_points": 30,
    "points_lost": 0,
    "cpu_avg": 15.2,
    "delay_avg": 0.002,
    "read_errors": 0,
    "csv_errors": 0,
    "udp_errors": 0
  }
}

/api/performance/historical?windows=6

Métricas históricas (últimos N×10s):

{
  "success": true,
  "historical_performance": {
    "windows": 6,
    "duration_minutes": 1.0,
    "total_points_saved": 720,
    "total_variables_saved": 10800,
    "total_udp_sent": 480,
    "total_points_lost": 0,
    "total_errors": 0,
    "points_per_second": 12.0,
    "loss_rate_percent": 0.0,
    "average_cpu_percent": 14.8,
    "average_delay_seconds": 0.002
  }
}

/api/priority/status

Incluye estadísticas de rendimiento completas:

{
  "priority_protection": {
    "performance_current": { ... },
    "performance_historical": { ... }
  }
}

🔧 Configuración y Uso

Inicio Automático

El monitoreo se inicia automáticamente cuando:

# Al iniciar CSV recording:
streamer.start_csv_recording()
# - Inicia PerformanceMonitor
# - Configura intervalos de datasets
# - Comienza logs cada 10s

Configuración de Intervalos

# Se configura automáticamente por dataset:
self.performance_monitor.set_dataset_interval(dataset_id, interval)
# Usado para detectar puntos perdidos

Parada Automática

# Al parar CSV recording:
streamer.stop_csv_recording()
# - Para PerformanceMonitor
# - Guarda estadísticas finales

📋 Interpretación de Métricas

Rendimiento Óptimo

  • Points Lost: 0 - Sin puntos perdidos
  • CPU < 50% - Uso moderado de CPU
  • Delay < 10ms - Timing dentro de tolerancia
  • Errors: 0 - Sin errores de lectura/escritura

⚠️ Rendimiento Degradado

  • Points Lost > 0 - Revisar carga del sistema
  • CPU > 80% - Optimizar configuración
  • Delay > 50ms - Reducir frecuencia de muestreo
  • Errors > 0 - Verificar conexión PLC/archivos

🚨 Problemas Críticos

  • Points Lost > 10% rate - Sistema sobrecargado
  • CPU > 95% - Recursos insuficientes
  • Consecutive Errors > 5 - Fallo de comunicación
  • Read Time > interval - PLC sobrecargado

🛠️ Troubleshooting

Alto Rate de Puntos Perdidos

  1. Reducir frecuencia de muestreo de datasets
  2. Optimizar variables - eliminar variables innecesarias
  3. Verificar carga del sistema operativo
  4. Revisar conexión PLC - latencia de red

CPU Elevado

  1. Verificar threads activos en /api/priority/status
  2. Reducir datasets simultáneos
  3. Optimizar hardware - SSD, más RAM
  4. Cerrar aplicaciones innecesarias

Errores de Lectura

  1. Verificar estado PLC en /api/status
  2. Comprobar variables - direcciones correctas
  3. Revisar red - ping al PLC
  4. Verificar snap7.dll disponible

Retrasos de CSV

  1. Verificar espacio en disco
  2. Comprobar permisos de escritura
  3. Optimizar directorio records (SSD)
  4. Reducir tamaño de archivos CSV

📊 Métricas de Referencia

Sistema Típico (Fast=0.1s, DAR=1.0s)

  • Points/second: 11-13 (Fast: 10/s + DAR: 1/s)
  • CPU Usage: 10-25% (depende del hardware)
  • Read Time: 5-15ms por dataset
  • CSV Write: 1-5ms por punto
  • Delay: < 10ms normalmente

Sistema Optimizado

  • Loss Rate: < 0.1%
  • CPU Usage: < 20%
  • Average Delay: < 5ms
  • Error Rate: 0 errors/10s

La clave es mantener Points Lost = 0 y CPU < 50% para garantizar recording continuo y confiable.