La consommation de mémoire de mon application IEC augmente.
Préparations :
Vous avez besoin d'un système d'exécution dans lequel CmpMemGC
le composant est activé et actif. Vous pouvez vérifier si ce composant est chargé dans le journal d'exécution.
Résolution des problèmes
Si vous remarquez des effets étranges après un certain temps de fonctionnement de votre application IEC (comme la perte de l'état de la licence ou le fait qu'aucune nouvelle mémoire ne peut être allouée), cela peut être dû à une fuite de mémoire.
Vous devez étudier ces effets et trouver la source du problème.
CODESYS Memory DeviceTrace
Cette fonction est disponible dans les systèmes d'exécution SP19 (version SL 4.9.0.0) et supérieures. Il peut être utilisé très facilement :
Activez le paramètre dans l'environnement d'exécution.
Arrêtez l'exécution via Deploy Tool.
Connectez-vous à votre système cible via
putty
ou un autre client SSH.Ouvrez le fichier de configuration de l'environnement d'exécution avec un éditeur de texte (par exemple, nano) :
sudo nano /etc/codesyscontrol/CODESYSControl.cfg
Dans le
CmpMemGC
section, ajoutez l'entréeEnableMemTrace=1
.[CmpMemGC] EnableMemTrace=1
Enregistrez et fermez le fichier.
Redémarrez le runtime via Deploy Tool.
Ajoutez la trace de l'appareil à votre CODESYS projet (où ce problème se produit).
Dans l'arborescence des appareils, cliquez avec le bouton droit sur l'appareil.
Cliquez Ajouter un objet → Suivi de l'appareil.
Le Traçabilité de l'appareil l'objet est inséré en dessous du contrôleur.
Le Suivi de l'appareil l'onglet s'affiche.
Cliquez sur Trace → Charger une trace commande.
Le Traces en ligne de l'appareil 'CodeSys_Control_For_Linux_SL' une boîte de dialogue s'ouvre.
Si vous ne trouvez pas MemGC Trace entrée, le réglage de l'étape 1 n'est pas défini correctement. Si votre contrôleur ne prend pas en charge le mécanisme, utilisez l'une des deux options suivantes pour le diagnostic.
Sélectionnez le MemGC Trace entrez et cliquez Télécharger et fermer la boîte de dialogue.
La trace mémorielle (
MemGCTrace
) est ajouté auDeviceTrace
.
Pour plus d'informations, voir : Commande : Upload Trace
CODESYS Bibliothèque : SysMem
Vous pouvez également accéder aux informations internes par programmation. Vous pouvez accéder à l'aperçu actuel de toutes les mémoires RAM/tas allouées via les fonctions de la bibliothèque IEC
SysMem.SysMemGetCurrentHeapSize()
Cette valeur peut être utilisée pour observer la taille actuelle du tas. Vous pouvez surveiller cette valeur ou l'écrire dans une trace.
Cela peut vous aider à déterminer si l'augmentation de la mémoire allouée est liée au temps et à certains autres événements de votre application IEC.
ligne de commande Linux
Si vous avez accès à la console Linux (par exemple, via un client SSH), vous pouvez également vérifier le comportement de la mémoire.
Il existe différents outils et commandes pour y parvenir :
haut/haut
Il s'agit d'outils graphiques permettant d'analyser les processus (et les threads) sur un système Linux.
Presque toutes les distributions Linux fournissent ces outils, vous pouvez donc les installer facilement via apt
ou dnf
ou la gestion des packages de la distribution.
htop # or top
Les deux outils peuvent être utilisés pour afficher les fils dans une arborescence et pour analyser les CODESYS processus d'exécution et ses threads. Chaque tâche IEC est pthread
au cours du processus d'exécution.
Dans l'outil htop, vous pouvez personnaliser la vue via F2 (menu de configuration) : nous vous recommandons d'activer le Tree view
et Show custom thread names
options.
Dans la zone supérieure, vous pouvez activer l'arborescence à l'aide de la combinaison de touches quart de travail + V et voyez donc l'utilisation du processeur et de la mémoire par thread. Cela peut vous aider à déterminer si l'augmentation de la mémoire allouée est liée au temps et à certains autres événements de votre application IEC, ou s'il s'agit d'une fuite de mémoire