Skip to main content

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 :

  1. Activez le paramètre dans l'environnement d'exécution.

    1. Arrêtez l'exécution via Deploy Tool.

    2. Connectez-vous à votre système cible via putty ou un autre client SSH.

    3. 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
    4. Dans le CmpMemGC section, ajoutez l'entrée EnableMemTrace=1.

      [CmpMemGC]
      EnableMemTrace=1
    5. Enregistrez et fermez le fichier.

    6. Redémarrez le runtime via Deploy Tool.

  2. Ajoutez la trace de l'appareil à votre CODESYS projet (où ce problème se produit).

    1. Dans l'arborescence des appareils, cliquez avec le bouton droit sur l'appareil.

    2. Cliquez Ajouter un objetSuivi 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.

    3. Cliquez sur TraceCharger une trace commande.

      Le Traces en ligne de l'appareil 'CodeSys_Control_For_Linux_SL' une boîte de dialogue s'ouvre.

    4. 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.

      _rtsl_img_iec_memory.png
    5. 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é au DeviceTrace.

    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