Solución de Problemas de Crecimiento de Memoria en Sistemas TestStand

Actualizado el Jun 4, 2021

Ambiente

Software

  • TestStand

Al crear una secuencia de TestStand que debe ejecutarse durante un período prolongado, una preocupación clave es la creación de secuencias y módulos de código que no causen un crecimiento significativo de la memoria con el tiempo. Durante el desarrollo, esto significa que debe administrar cuidadosamente la memoria en secuencias de prueba y módulos de código para evitar errores de memoria insuficiente cuando el sistema de prueba se ejecuta durante un período de tiempo prolongado. El propósito de este documento es explicar las causas de los errores de memoria insuficiente en los sistemas TestStand y esbozar un proceso de depuración que puede seguir para identificar y resolver problemas de crecimiento de la memoria en su sistema de prueba.

Efectos del crecimiento de la memoria en los sistemas de prueba

Es importante reconocer que el crecimiento de la memoria no siempre indica un problema con el sistema de prueba. Por ejemplo, si un módulo de código está adquiriendo datos de medición del hardware y almacena los datos en una matriz, el uso de la memoria del módulo de código aumentará a medida que se almacenan los datos. Por lo general, se espera que ocurra este tipo de crecimiento de la memoria.

Sin embargo, si la memoria asignada por los módulos de código u otros componentes del sistema de prueba no se libera cuando ya no se necesita, el uso de la memoria seguirá aumentando a medida que se ejecuta el sistema de prueba. Esto eventualmente puede causar un error de falta de memoria o bloquearse una vez que el sistema de prueba use toda la memoria disponible. Este crecimiento incontrolado de la memoria a lo largo de múltiples iteraciones de secuencia de prueba a menudo se denomina pérdida de memoria.

Causas de errores de memoria insuficiente

Los errores de memoria insuficiente pueden ocurrir por varias razones:

  • Crecimiento excesivo de la memoria durante un solo bucle de prueba, que puede ocurrir si la secuencia de prueba para una sola UUT intenta asignar más memoria de la que está disponible para el sistema de prueba. Esto a menudo da como resultado un error de memoria insuficiente si el código de prueba intenta asignar un bloque contiguo de memoria para almacenar una matriz, cadena u otro conjunto de datos grande.
  • Crecimiento ilimitado de la memoria en múltiples bucles de prueba, que puede ocurrir si hay una pérdida de memoria en la secuencia de prueba o en un módulo de código llamado por la secuencia de prueba.

Proceso de resolución de problemas de crecimiento de la memoria

Puede ser difícil rastrear problemas de crecimiento de la memoria en grandes sistemas de prueba debido a la cantidad de código ejecutado durante una prueba. Además, es posible que el crecimiento de la memoria no cause un error hasta que el sistema de prueba se haya estado ejecutando durante un largo período de tiempo y puede causar un bloqueo u otra inestabilidad en el sistema de prueba en lugar de generar un error de falta de memoria.

Por estas razones, solucionar un problema de crecimiento de la memoria es un proceso metódico en el que se analizan los datos de uso de la memoria para comprender qué tipo de crecimiento se está produciendo, se reduce el código de prueba a un caso de prueba mínimo que reproduce el crecimiento de la memoria y se examina la prueba mínima para identificar y resolver los problemas de crecimiento de la memoria. Este proceso se describe a continuación en una guía paso a paso que puede seguir mientras investiga problemas de crecimiento de la memoria en su sistema de prueba. Los otros documentos de esta serie están vinculados en puntos relevantes del proceso de resolución de problemas. Le proporcionarán detalles sobre los pasos de solución de problemas que debe seguir, así como orientación sobre cómo debe interpretar los resultados que recopile en cada etapa del proceso.

Guía de solución de problemas paso a paso

  1. Revise las limitaciones de memoria del sistema de prueba consultando el documento Memory Limits of TestStand Systems. Este documento explica los límites de memoria impuestos por el sistema operativo, el proceso del sistema de prueba y otros factores.
  2. Examine los ajustes y la configuración del sistema de prueba para comprender la cantidad de memoria disponible para el sistema de prueba.
    1. Tipos de módulos de código y si son de 32 o 64 bits
    2. Módulos de código que se ejecutan en proceso o fuera de proceso
    3. Configuración de recopilación de resultados
    4. Configuración del complemento de modelo
  3. Utilice herramientas de creación de perfiles de memoria para recopilar datos sobre el uso de la memoria del sistema de prueba.
    1. Consulte el documento Using Memory Profiling Tools to Characterize Memory Growth Issues in TestStand Systems para obtener información sobre el uso de herramientas de creación de perfiles de memoria y la interpretación de los resultados de las herramientas.
    2. Determine qué herramienta (s) usar para monitorear el crecimiento de la memoria
      1. Administrador de tareas
      2. Monitor de rendimiento
    3. Ejecute un caso de prueba para determinar el tipo de memoria que crece y cuánto crece por bucle de caso de prueba.
      1. Conjunto de trabajo privado / Bytes privados
      2. Montón de .NET
      3. Manejas
      4. Hilos
      5. Objetos de usuario y GDI
  4. Reduzca un caso de prueba para centrarse en un conjunto más pequeño de código que contribuye al problema.  Characterizing Memory Issues in TestStand Systems El documento proporciona orientación sobre cómo reducir un caso de prueba a un conjunto mínimo de código que reproduce el crecimiento de la memoria.
    1. Utilice las herramientas de creación de perfiles de memoria del paso 3 para recopilar datos de crecimiento de la memoria a medida que reduce un caso de prueba
    2. Determinar si la recopilación de resultados está contribuyendo al crecimiento de la memoria
      1. Deshabilitar complementos de modelo
      2. Desactive la recopilación de resultados para secuencias de prueba específicas o para toda la estación de prueba
  5. Simplifique la secuencia de prueba para determinar qué pasos contribuyen al crecimiento de la memoria.
    1. Ejecutar sin un modelo de proceso TestStand
    2. Omitir pasos o secuencias dentro del caso de prueba para reducir el conjunto de pasos problemáticos
    3. Reducir la secuencia de prueba a módulos de código específicos si es posible
  6. Identifique y resuelva el problema de crecimiento de la memoria examinando la secuencia de prueba y los módulos de código.
    1. Si el problema solo ocurre cuando la recopilación de resultados o los complementos del modelo están habilitados, configure los ajustes de procesamiento de resultados para conservar memoria
    2. Una vez que haya reducido el caso de prueba a una secuencia de prueba o módulo de código específico, examine la secuencia de prueba o el módulo de código para identificar la causa del crecimiento de la memoria.
    3. Consulte el documento de esta serie Identifying and Resolving Memory Growth Issues in TestStand Systems para obtener orientación sobre la investigación de problemas de crecimiento de la memoria en secuencias y módulos de código TestStand
    4. Si el problema está ocurriendo en un módulo de código de LabVIEW, consulte el documento Investigating Memory Growth Issues in LabVIEW Code Modules Called from TestStand
    5. Si el problema ocurre en un módulo de código de LabWindows™ /CVI™ , consulte la sección de LabWindows/CVI del documento Identifying and Resolving Memory Growth Issues in TestStand Systems.
    6. Si el problema ocurre en un módulo de código .NET, consulte la sección .NET del documento Identifying and Resolving Memory Growth Issues in TestStand Systems.
  7. Después de resolver los problemas de crecimiento de la memoria que identificó, vuelva al paso 3 para determinar si el crecimiento de la memoria todavía se está produciendo en otra parte del sistema de prueba.