El consumo de memoria de mi aplicación IEC está aumentando.
Preparativos:
Necesita un sistema de ejecución en el que CmpMemGC
el componente está activado y activo. Puede comprobar si este componente está cargado en el registro de tiempo de ejecución.
Solución de problemas
Si observa efectos extraños después de un cierto tiempo de funcionamiento de su aplicación IEC (como la pérdida del estado de la licencia o que no se puede asignar memoria nueva), esto podría deberse a una pérdida de memoria.
Debe investigar estos efectos y encontrar el origen del problema.
CODESYS Dispositivo de memoria Trace
Esta función está disponible en los sistemas de ejecución versión SP19 (SL versión 4.9.0.0) y superiores. Se puede usar
Habilite la configuración en el entorno de ejecución.
Detenga el tiempo de ejecución mediante Deploy Tool.
Conéctese a su sistema objetivo mediante
putty
u otro cliente SSH.Abra el archivo de configuración del entorno de ejecución con un editor de texto (por ejemplo, nano):
sudo nano /etc/codesyscontrol/CODESYSControl.cfg
En el
CmpMemGC
sección, añada la entradaEnableMemTrace=1
.[CmpMemGC] EnableMemTrace=1
Guarda y cierra el archivo.
Reinicie el tiempo de ejecución mediante Deploy Tool.
Agregue el rastreo del dispositivo a su CODESYS proyecto (donde se produce este problema).
En el árbol de dispositivos, haga clic con el botón derecho en el dispositivo.
Haga clic Agregar objeto → Rastreo de dispositivos.
El DeviceTrace el objeto se inserta debajo del controlador.
El Rastreo del dispositivo se muestra la pestaña.
Haga clic en Rastrear → Cargar Trace comando.
El Rastros en línea del dispositivo 'Codesys_Control_for_Linux_SL' se abre el cuadro de diálogo.
Si no puede encontrar el MemgcTrace , entonces la configuración del paso 1 no está configurada correctamente. Si su controlador no es compatible con el mecanismo, utilice una de las dos opciones siguientes para el diagnóstico.
Seleccione el MemgcTrace entrada y clic Cargar y cerrar cuadro de diálogo.
El rastro de la memoria (
MemGCTrace
) se añade alDeviceTrace
.
Para obtener más información, consulte: Comando: Upload Trace
CODESYS Biblioteca: SysMem
También puede acceder a la información interna mediante programación. Puede acceder a la descripción general actual de toda la RAM o memoria acumulada asignada a través de las funciones de la biblioteca IEC
SysMem.SysMemGetCurrentHeapSize()
Este valor se puede usar para observar el tamaño actual del montón. Puede observar este valor o escribirlo en una traza
Esto puede ayudarle a determinar si el aumento de la memoria asignada se basa en el tiempo con otros eventos de su aplicación IEC.
Línea de comandos de Linux
Si tiene acceso a la consola de Linux (por ejemplo, a través de un cliente SSH), también puede comprobar el comportamiento de la memoria.
Hay varias herramientas y comandos para lograrlo:
htop//arriba
Se trata de herramientas gráficas para analizar los procesos (y subprocesos) de un sistema Linux.
Casi todas las distribuciones de Linux proporcionan estas herramientas, por lo que puede instalarlas fácilmente a través de apt
o dnf
o la gestión de paquetes de la distribución.
htop # or top
Ambas herramientas se pueden usar para ver los hilos en una vista de árbol y para analizar los CODESYS el proceso de ejecución y sus subprocesos. Cada tarea de IEC es una pthread
dentro del proceso de ejecución.
En la herramienta htop, puede personalizar la vista mediante F2 (menú de configuración): le recomendamos que habilite el Tree view
y Show custom thread names
opciones.
En el área superior, puede habilitar la vista en árbol con la combinación de teclas Turno + V y, por lo tanto, consulte el uso de la CPU y el uso de la memoria por subproceso. Esto puede ayudarle a determinar si el aumento de la memoria asignada se debe al tiempo debido a otros eventos en su aplicación IEC, o si se trata de una pérdida de memoria