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 :

Benchmark d'utilisation cpu et memoire d'un process


Sujet :

C#

  1. #1
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut Benchmark d'utilisation cpu et memoire d'un process
    Salut,

    J'aimerais faire une petite appli qui Benchmark l'utilisation cpu et l'utilisation mémoire d'un processus bien précis (certainement en fonction de son nom, ou alors je récupère le handle au démarrage de l'appli), et éventuellement l'utilisation CPU globale et mémoire globale sur le PC.

    Est-ce possible de récupérer ces valeurs sans trop utiliser de ressources? L'idée est que si mon appli utilise trop de ressources, cela va fausser les mesures... De plus, si c'est possible d'obtenir ces valeurs, qu'en est-il d'une situation multi-processeur?

    Merci de votre aide précieuse...
    Stéphane

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Le mieux est de faire l'opération à distance.

    Comme le font les softs de supervision, de monitoring. Des trucs comme Nagios.
    D'ailleurs si je ne me trompe pas c'est OpenSource. Mais bon plutot destiner à une utilisation sur serveur linux. Grâce à des clients développer pour, nagios peut sup des serveurs windows. mais il y a moins de fonctionnalité naives. Enfin tu peux toujours faire des scripts en VBS par exemple .

    Enfin bref en remoting tu es sur de ne pas fausser tes tests mémoires, cpu, ....

  3. #3
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Ok je comprends bien l'utilité d'un programme à distance mais tant pis si ça fausse un peu mes calculs, j'aimerais faire une appli simple qui tourne en local, sans GUI, qui log l'occupation cpu et mem dans un fichier tout simple...

    Le problème, c'est comment récupérer ces infos sans faire de savants calculs?

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Il y a des classes pour faire du monitoring en C# mais je ne l'ai connais pas.
    Un tour sur google devrait t'aider.

  5. #5
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    J'ai quelques recherches sur goole et je n'ai rien trouvé... Est-ce que quelqu'un sait ce que je peux utiliser?

    Merci

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    regarde du coté de l'objet PerformanceCounter .
    Je ne sais pas trop comment il marche, mais j'utilise un bout de code trouvé sur la toile qui utilise cet objet pour obtenir le parent process ID d'un processus.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    alors petite note histoire de ne pas tourner en rond....

    toute tentative pour look les performances d'un processus fausses obligatoirement le résultat obtenu.
    ne t'inquiète pas c'est pas inhérent à ta facon de programmer ou ton programme, c'est le problème de l'observateur très connu en physique... Merci la physique quantique

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ne serais ce pas du au fait que l'observateur ne peut être neutre et que pour observer il provoque une interaction avec l'observé ?

  9. #9
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Oui je comprends bien que ça va fausser mes résultats. Toutefois je n'ai pas besoin d'une grande précision. Mon application va uniquement servir à meurer la charge d'un serveur MySQL et de l'enregistrer dans un fichier log. J'aimerais faire cette petite application car une erreur survient aléatoirement et j'ai l'impression qu'elle est due à une surcharge du serveur...

    Bon voilà pour le décor... Je me dis que même si ça fause les calculs et que ça surcharge mon process MySQL, l'erreur surviendra encore plus souvent, et en quelque sorte, c'est ce que je veux...

    Pour en revenir au code, j'ai fait quelques essais avec PerformanceCounter mais je n'ai rien trouvé de bien. Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    class Program
      {
        private static PerformanceCounter cpuCounter;
        private static PerformanceCounter ramCounter;
     
        static void Main(string[] args)
        {
          /*
          First you have to create the 2 performance counters
          using the System.Diagnostics.PerformanceCounter class.
          */
          cpuCounter = new PerformanceCounter();
          ramCounter = new PerformanceCounter(); 
     
          cpuCounter.CategoryName = "Processor";
          cpuCounter.CounterName = "% Processor Time";
          cpuCounter.InstanceName = "_Total";
     
          ramCounter = new PerformanceCounter("Memory", "Available MBytes");
     
          Console.WriteLine(getCurrentCpuUsage());
          Console.WriteLine(getAvailableRAM());
     
          Console.ReadKey();
        }
     
        /*
        Call this method every time you need to know
        the current cpu usage.
        */
     
        public static string getCurrentCpuUsage()
        {
          return cpuCounter.NextValue() + "%";
        }
     
        /*
        Call this method every time you need to get
        the amount of the available RAM in Mb
        */
        public static string getAvailableRAM()
        {
          return ramCounter.NextValue() + "Mb";
        }
    La mémoire disponibla m'a l'air juste mais l'utilisation cpu reste toujours à 100%.

    Merci de votre aide!!
    Stéphane

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    pourquoi instancies tu 2 fois ramCounter ?
    pour cpuCounter essaye de l'instancier comme tu as instancié la deuxième fois
    ramCounter.

  11. #11
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    J'ai fait les deux modifs mais c'est toujours la même chose. Il reste à 0%. Est-ce qu'il existe une doc pour avoir la liste des PerformanceCounter avec tous les paramètres qu'ils peuvent prendre?

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Peut être la doc en ligne de microsoft sur le site msdn

  13. #13
    Invité de passage
    Inscrit en
    Juin 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1
    Par défaut Alors?
    Je suis actuellement dans le même cas que toi, as tu trouvé une solution ?
    Merci d'avance

  14. #14
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Je n'avais pas réussi à résoudre le problème, et avais un peu laissé tombé l'affaire. Quand j'aurai un peu plus de temps, je m'y repencherai. C'est mes débuts... Je ne peux malheureusement regarder ces prochains jours...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Par défaut
    !!!

  16. #16
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 26
    Par défaut
    Citation Envoyé par stephane.julien Voir le message
    Oui je comprends bien que ça va fausser mes résultats. Toutefois je n'ai pas besoin d'une grande précision. Mon application va uniquement servir à meurer la charge d'un serveur MySQL et de l'enregistrer dans un fichier log. J'aimerais faire cette petite application car une erreur survient aléatoirement et j'ai l'impression qu'elle est due à une surcharge du serveur...

    Bon voilà pour le décor... Je me dis que même si ça fause les calculs et que ça surcharge mon process MySQL, l'erreur surviendra encore plus souvent, et en quelque sorte, c'est ce que je veux...

    Pour en revenir au code, j'ai fait quelques essais avec PerformanceCounter mais je n'ai rien trouvé de bien. Voilà mon code :

    La mémoire disponibla m'a l'air juste mais l'utilisation cpu reste toujours à 100%.

    Merci de votre aide!!
    Stéphane
    Bonjour,

    D'après ce que j'ai lu et compris de ton poste tu penses que ton serveur MySQL sature ton PC (ram/processeur), tu devrais essayer de le surveiller avec MySQL Administrator (http://www.mysql.com/products/tools/), il te permet de vérifier déja que tu n'es pas en surchage de connexion ou de débit, et de logger tout un tas d'erreurs.

  17. #17
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    En fait j'ai trouvé l'erreur MySQL, c'était du à des timeout sur des connexions mal fermées, mais merci quand même

    Mais mon problème n'est toujours pas résolu !

Discussions similaires

  1. Connaitre l'utilisation CPU/mémoire
    Par Flophx dans le forum Administration système
    Réponses: 5
    Dernier message: 09/02/2007, 11h40
  2. Utilisation de la memoire partage
    Par Treuze dans le forum C
    Réponses: 11
    Dernier message: 23/05/2006, 14h45
  3. Utilisation cpu
    Par flzox dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/05/2006, 14h05
  4. Limiter l'utilisation CPU d'un programme sous debian
    Par programmerPhil dans le forum Administration système
    Réponses: 3
    Dernier message: 28/03/2006, 16h07
  5. Question Utilisation cpu
    Par devdev2003 dans le forum Administration système
    Réponses: 4
    Dernier message: 03/12/2005, 17h01

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