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

C Discussion :

Récupérer le %cpu %mem d'un processus


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut Récupérer le %cpu %mem d'un processus
    Bonsoir,

    je dois récupérer le %cpu et %mem d'un processus pour créer mon propre ps.

    Je récupére les informations du processus dans /proc/num_processus/stat.

    Le problème est que je n'arrive pas à trouver le calcul avec les informations que j'ai (utime,stime,cutime,cstime,..) pour trouver le %mem et %cpu du processus.

    Je ne trouve pas également le start et time d'un processus.

    Comment les calculer/trouver ?

    Merci, d'avance pour votre aide.

  2. #2
    Candidat au Club
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Récupérer le %cpu %mem d'un processus
    Bonjour,

    Je travaille actuellement sur un projet similaire (reproduction du TOP).

    Pour la mémoire, en faisant un man proc, tu vas voir que tu peux récupérer la vsize et la rss (pour moi ce sont les 22èmes et 23èmes informations) via le fichier stat.

    vsize correspond au champ VIRT du top.
    rss au nombre de pages en mémoire réelle (non swappée). En multipliant cette valeur par la taille des pages (getpagesize()) tu peux donc connaitre la consommation de ta mémoire. Il te suffit en suite de récupérer la MemTotal indiquée dans le fichier /proc/meminfo pour connaitre le %MEM du processus, visible habituellement dans le TOP.

    En ce qui concerne le cpu, je récupère, toujours dans le /proc/pid/stat les champs utime et stime. Je fais ensuite le ratio avec les 3 première valeurs indiqué dans /proc/stat (toujours man proc ) pour avoir mon taux d'occupation CPU.
    Néanmoins, sur ce dernier point, je n'arrive pas à obtenir les mêmes valeurs que dans le champ %CPU du TOP. Si quelqu'un a une explication ou une idée, je suis donc preneur...

    J'espère avoir répondu à ta question.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    merci pour l'aide, le %mem marche bien mais pour le %cpu je trouve pas du tout pareil.

    exemple:
    le ps j'ai : nbhlp 6313 0.2 1.5 102572 27048 ? Rl 14:58 0:21 gnome-terminal

    le %CPU est 0.2

    dans le /proc/pid/stat j'ai utime=1534 et stime=546

    dans /proc/stat j'ai: cpu 34775 278 21964

    je fais donc utime+stime / le temps passé dans les différents mode ?

    je trouve 0,036, bien loin du 0,2 du ps

    comment faire ? même question pour le START et TIME ?

  4. #4
    Candidat au Club
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bon à priori j'ai réussi à avoir qqch qui ressemble au top.

    En gros, je récupère à chaque cycle dans ma boucle le utime et le stime dans /proc/pid/stat pour avoir le nombre de ticks du processus.

    Je récupère ensuite dans /proc/stat, pour la 1re ligne (cpu) toutes les valeurs que j'additionne (utime, stime, idle, iowait..., cf man /proc). Si j'ai bien compris, ça donne le nombre de ticks pour chaque mode depuis le boot du système, donc en prenant tout, je couvre tous les modes.

    Pour chacune de ces 2 variables, je fais ensuite la différence avec leur valeurs du cycle précédent et ça me donne le %CPU courant pour chaque processus.
    Pour résumer, je fais :

    proc_conso(t) - proc_conso(t-1)
    --------------------------------
    cpu_conso(t) - cpu_conso(t-1)

    Après, pour avoir des valeurs plus représentatives, je moyenne le résultat sur n secondes avant de l'envoyer au client.

    Voilà. L'écart que j'ai avec le %CPU du top doit ensuite correspondre à la cadence de mes rafraichissements et des moyens.

Discussions similaires

  1. Récupérer utilisation cpu d'un processus
    Par athomas dans le forum C++
    Réponses: 1
    Dernier message: 03/08/2010, 17h32
  2. Informations CPU sur tous les processus
    Par Baptiste Wicht dans le forum Ubuntu
    Réponses: 3
    Dernier message: 14/02/2010, 11h32
  3. avoir le % cpu utilisé par les processus
    Par wkharrat dans le forum Linux
    Réponses: 5
    Dernier message: 04/02/2009, 17h42
  4. Récupérer le handle à partir d'un processus
    Par sat83 dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2005, 17h21
  5. Pourcentage CPU utilisé par un processus
    Par yakotey dans le forum Threads & Processus
    Réponses: 6
    Dernier message: 04/10/2005, 13h11

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