IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Récupérer la quantité de mémoire utilisée par mon soft


Sujet :

Embarqué

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut Récupérer la quantité de mémoire utilisée par mon soft
    Bonjour,


    Je développé un soft actuellement sur un petit serveur linux (DIGI9210).

    J'aimerais connaitre la quantité de mémoire utilisé par mon soft. J'avais un souci d'allocation dynamique de la mémoire. Je pense avoir trouvé l'origine du problème car le code porté sur le DIGI proviens d'une ancienne version de ce même type de produit qui ne possédait pas les fonction "malloc" et "free". Il avait donc été recrée.
    Avec le nouveau DIGI il contient un vrais linux et donc ces fonctions sont disponible par la librairie stdlib.

    J'aimerais trouver un moyen de récupérer la quantité de mémoire utilisé par mon soft. Sachant que je connais son PID déjà.

    J'ai trouvé la commande "free" exécuté depuis un prompt mais elle na pas toutes les options, j'ai donc que la mémoire total disponible.
    Autre fonction trouvé, la commande "top", très intéressante au niveau résultat car le je vois bien tout mais elle est cyclique c'est pas facile à récupérer.

    L'idéal serait de récupérer toutes l'informations que me donne la commande top que je puisse récupérer l'info qui va bien voir plus comme la mémoire disponible encore, mais uniquement quand mon code l'appel.

    Je code en C. Je vais continuer à chercher de ce coté la car j'aimerais pouvoir monitorer cette information.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Salut,

    Si tu as déjà trouvé free et top, tu dois déjà avoir pas mal d'informations à ta disposition !

    Je pense que valgrind pourra te donner des informations intéressantes également. Il te dit combien d'allocations et de libérations ont été faites pendant l'exécution complète du programme, combien de blocs n'ont pas été libérés, les fuites mémoire, etc. Tu as aussi DrMemory qui fait des choses similaires.

    Ces outils font plus que juste regarder les fuites mémoires. Ils sont aussi capables de dire si tu écris à des endroits où tu n'es pas censé écrire (comme dans mon article sur DrMemory) par exemple.

    Dés que possible, on devrait passer nos programmes dans ce genre d'outils (dit "débogueurs mémoire")

    A plus.

  3. #3
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Salut,

    Si tu as déjà trouvé free et top, tu dois déjà avoir pas mal d'informations à ta disposition !
    Mon souci c'est que je ne sais pas comment le mettre en oeuvre dans mon code.

    Je programme en C. Si je fait un simple System("top"); comment récupérer l'info.

    Cela ne fait pas longtemps que je me suis mis au C sur de l'embarqué, de plus je part d'un code existant pour une autre plateforme. Donc comprendre comment cela marche en plus de comprendre ce qu'a voulu effectuer mon prédécesseur n'est pas simple.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    La commande system() permet d'appeler un programme externe puis de revenir au programme courant, tu ne peux pas faire un transfert d'informations avec cette commande si je ne dis pas de bêtises.

    Il faut que tu nous expliques clairement ce que tu veux faire :
    • souhaites-tu moniter ton application depuis l'extérieur ?
    • souhaites-tu que ton application soit au courant de l'espace qu'elle a déjà alloué ou de l'espace encore disponible sur le système ?
    • souhaites-tu connaitre le bilan de ton application une fois qu'elle s'est terminé ?


    De plus, quand tu parles de mémoire allouée, parles-tu de l'utilisation de la stack, de l'utilisation du heap, des deux ?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Salut,

    Voir mallinfo() dans malloc.h

    http://man7.org/linux/man-pages/man3/mallinfo.3.html

  6. #6
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par Bktero Voir le message
    La commande system() permet d'appeler un programme externe puis de revenir au programme courant, tu ne peux pas faire un transfert d'informations avec cette commande si je ne dis pas de bêtises.
    C'est bien ce qui me semblait

    Citation Envoyé par Bktero Voir le message
    Il faut que tu nous expliques clairement ce que tu veux faire :
    • souhaites-tu moniter ton application depuis l'extérieur ?
    • souhaites-tu que ton application soit au courant de l'espace qu'elle a déjà alloué ou de l'espace encore disponible sur le système ?
    • souhaites-tu connaitre le bilan de ton application une fois qu'elle s'est terminé ?
    Je souhaite connaitre effectivement la mémoire alloué à mon logiciel, afin de la monitorer, mais c'est plus pour information de débogage qu'autre chose, avec l'ancien code (de l'ancien serveur) on renvoyait l'information sur la page du HTTP (mon logiciel crée un serveur http). Le client peux donc voir ces infos sur la page Web classique et le texte de la mémoire alloué apparaît dans le bas de page en plus de la durée de fonctionnement (en cas de reboot automatique) ainsi que la durée de fonctionnement du serveur http (la c'est moins utile).
    Idem pour le serveur snmp. L'un des GET snmp concerne cette quantité de mémoire alloué.

    Citation Envoyé par Bktero Voir le message
    De plus, quand tu parles de mémoire allouée, parles-tu de l'utilisation de la stack, de l'utilisation du heap, des deux ?
    La vous me parlez en chinois, je regarde sa demain pour comprendre ce que cela veux dire. Mais je suppose que se doit être la mémoire total utilisé par le logiciel ou juste la quantité de mémoire alloué dynamiquement par les maloc.

    En tout cas si je peux avoir la quantité de mémoire total utilisé par mon logiciel, et la quantité de mémoire utilisable ce serait super.

    Citation Envoyé par mith06
    Voir mallinfo() dans malloc.h
    Je vais regardé cela. Vu que pour faire fonctionner malloc j'ai juste intégré stdlib je suppose que malloc.h est inclus dans stdlib.



    Petite question, mon logiciel comporte plusieurs services lancés dans des thread différents. On viens de le voir le http, le snmp, la gestion du port COM, mon thread d'origine (le "main") et encore d'autre.

    Lorsque j'utilise la fonction "top" plusieurs pid existe avec le même nom de programme. Se doit donc être mes différents thread. Par contre la quantité de mémoire utilisé est exactement la même pour tout les threads.
    Si je kill le pid que je connais (lors de l'ouverture du logiciel) tous tombent. Mais si je kill un autre cela plante pas le logiciel (enfin pas de plantage avant que le watchdog ne ce déclenche et reboot).
    Pour avoir l'information exacte de la quantité de mémoire utilisé il faut que je les additionnent ? Je ne pense pas vu qu'il ont exactement la même quantité d'indiqué.

    Merci de votre aide en tout cas

  7. #7
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par mith06 Voir le message
    Salut,

    Voir mallinfo() dans malloc.h

    http://man7.org/linux/man-pages/man3/mallinfo.3.html
    Cela fonctionne parfaitement bien.

    Par contre quelles sont les différences entre ce que va me donner ce mallinfo et ce que l'on peu trouver avec la commande "top", c'est intéressant.

    Par exemple sur les informations:
    Total allocated space (uordblks) -> Par rapport à la mémoire utilisé ("top" sir le pid de mon soft)
    Total free space (fordblks) -> Par rapport à la memoire disponible ("top")


    Pour info:
    Avec la variable -> Total allocated space (uordblks). Je retrouve pratiquement la même quantité que j'avais avec l'ancienne version de mon programme, qui était utilisé sur l'ancien serveur.

Discussions similaires

  1. Mémoire utilisée par mon application
    Par Sephiroth Lune dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 30/05/2012, 14h21
  2. taille de mémoire utilisée par mon code javascript
    Par need2learn dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/10/2009, 09h00
  3. Réponses: 2
    Dernier message: 01/10/2009, 11h00
  4. la mémoire utilisée par un processus
    Par LN(a) dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/04/2006, 14h28
  5. Supprimer la mémoire utilisée par les variables globales
    Par dnaprotector dans le forum OpenGL
    Réponses: 4
    Dernier message: 21/07/2005, 13h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo