Il consumo di memoria della mia applicazione IEC è in aumento.
Preparazioni:
È necessario un sistema runtime in cui CmpMemGC
il componente è abilitato e attivo. È possibile verificare se questo componente è caricato nel registro di runtime.
Risoluzione dei problemi
Se si notano strani effetti dopo un determinato periodo di funzionamento dell'applicazione IEC (ad esempio la perdita dello stato della licenza o l'impossibilità di allocare nuova memoria), ciò potrebbe essere causato da una perdita di memoria.
Dovresti esaminare questi effetti e trovare l'origine del problema.
CODESYS Dispositivo di memoria Trace
Questa funzione è disponibile nei sistemi runtime versione SP19 (versione SL 4.9.0.0) e successive. Può essere utilizzata molto facilmente
Abilita l'impostazione nell'ambiente di runtime.
Interrompi il runtime tramite Deploy Tool.
Connettiti al tuo sistema di destinazione tramite
putty
o un altro client SSH.Apri il file di configurazione dell'ambiente di runtime con un editor di testo (ad esempio, nano):
sudo nano /etc/codesyscontrol/CODESYSControl.cfg
Nel
CmpMemGC
sezione, aggiungi la voceEnableMemTrace=1
.[CmpMemGC] EnableMemTrace=1
Salva e chiudi il file.
Riavviare il runtime tramite Deploy Tool.
Aggiungi la traccia del dispositivo al tuo CODESYS progetto (dove si verifica questo problema).
Nell'albero dei dispositivi, fate clic con il pulsante destro del mouse sul dispositivo.
Clicca Aggiungi oggetto → Traccia del dispositivo.
Le Device Trace l'oggetto viene inserito sotto il controller.
Le Traccia del dispositivo viene visualizzata la scheda.
Fai clic su Traccia → Carica Trace comando.
Le Tracce online del dispositivo 'Codesys_Control_for_Linux_SL' si apre una finestra di dialogo.
Se non riesci a trovare il MemGCTrace immissione, quindi l'impostazione del passaggio 1 non è impostata correttamente. Se il controller non supporta il meccanismo, utilizzate una delle due opzioni seguenti per la diagnosi.
Seleziona il MemGCTrace immissione e clic Carica e chiudi la finestra di dialogo.
La traccia della memoria (
MemGCTrace
) viene aggiunto aDeviceTrace
Per ulteriori informazioni, vedere: Comando: Upload Trace
CODESYS Libreria: SysMem
inoltre possibile accedere alle informazioni interne in modo programmatico. È possibile accedere alla panoramica attuale di tutta la RAM/memoria heap allocata tramite
SysMem.SysMemGetCurrentHeapSize()
Questo valore può essere utilizzato per osservare la dimensione attuale dell'heap. Puoi guardare questo valore o scriverlo su una traccia
Questo può aiutarti a determinare se l'aumento della memoria allocata è basato sul tempo con determinati altri eventi nell'applicazione IEC.
Riga di comando Linux
Se hai accesso alla console Linux (ad esempio, tramite un client SSH), puoi anche controllare il comportamento della memoria.
Esistono vari strumenti e comandi per raggiungere questo obiettivo:
alto/alto
Si tratta di strumenti grafici per analizzare i processi (e i thread) su un sistema Linux.
Quasi tutte le distribuzioni Linux forniscono questi strumenti, quindi puoi installarli facilmente tramite apt
o dnf
o la gestione dei pacchetti della distribuzione.
htop # or top
Entrambi gli strumenti possono essere utilizzati per visualizzare i thread in una visualizzazione ad albero e per analizzare i CODESYS processo di runtime e relativi thread. Ogni attività IEC pthread
all'interno del processo di runtime.
Nello strumento htop, puoi personalizzare la vista tramite F2 (menu di configurazione): Ti consigliamo di abilitare il Tree view
e Show custom thread names
opzioni.
Nella parte superiore, puoi abilitare la visualizzazione ad albero con la combinazione di tasti Shift + V e quindi vedi l'utilizzo della CPU/utilizzo della memoria per thread. Questo può aiutarti a determinare se l'aumento della memoria allocata è basato sul tempo in base a determinati altri eventi nell'applicazione IEC o se si è verificata una perdita di memoria