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

Java Discussion :

Obtenir le temps CPU


Sujet :

Java

  1. #1
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut Obtenir le temps CPU
    Salut,
    voilà qqn sait-il comment obtenir le temps CPU associé à un processus, entre deux lignes de code?
    Je m'explique par un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    instruction 1;
    instruction 2;
    long first = 0;
     
    ...
     
    instructions;
     
    ...
     
    first += tempsCPU(entre la ligne 3 et cette ligne);
    Attention currentTimeMillis ça marche pas !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Pour la simple et bonne raison ça calcule le temps réel entre deux lignes, càd que d'autres applications ou processus en cours vont ralonger ce temps. Ce que je veux c'est le trmps exact que consacre le CPU à mon processus seul.

    Voilà je sais pas si c'est clair, merci d'avance pour votre aide...
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  2. #2
    Membre actif Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 239
    Points
    239
    Par défaut
    Salut,

    Si tu es en java 5, tu peux utiliser l'API JMX comme le fait la jconsole.
    Il faut utiliser le MBean "ThreadMXBean".

    A+

  3. #3
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    En effet avec mxBean, y'a moyen (threadinfo)
    si tu y arrives tu peux poster ta réponse stp ?
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  4. #4
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    euh ben j'en sais rien moi comment y faut faire pour utiliser cette api
    Comment je fais (déso si je suis à la masse :s)
    Dans ThreadInfo y a juste des méthodes pour obtenir le temps attendu ou le temps bloqué, mais rien d'autre...

    Question : différence entre les currentTimeMillis() - temps attendu - temps bloqué = temps CPU ?
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  5. #5
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    http://today.java.net/download/jdk6/...eadMXBean.html
    getCurrentThreadCpuTime()
    Returns the total CPU time for the current thread in nanoseconds.
    Since:
    1.5
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  6. #6
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Trop fort!!!!!!!!!!!!!!!!!!!!!!!! Je teste ça tout de suite!!!
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  7. #7
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Les lignes de code à taper sont les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ThreadMXBean thread = ManagementFactory.getThreadMXBean();
    long nanos = thread.getCurrentThreadCpuTime();
    Il est spécifié dans l'Api qu'on récupère le thread de la machine virtuelle. Ca c'est bien mais ce n'est pas exactement ce qu'on voudrait car on souhaite calculer le temps CPU d'un thread particulier de la machine virtuelle, qui est surement elle-même constituée de plusieurs thread (supposition de ma part). La question est donc de savoir si cette méthode fait bien ce qu'on attend d'elle, le cas échéant s'il est possible d'isoler le thread dont on veut connaître le temps CPU... Mais à la base calculer le temps CPU Java à partir d'un compilateur C (cf lien donné en cours) ne me semble pas contourner ce problème, donc au pire on ne fait pas moins bien, ni mieux...

    Sinon une autre idée est que on connait la méthode currentTimeMillis qui nous renvoie le temps en millisecondes écoulé depuis de 1er janvier 1970. Ce n'est pas dut tout ce qu'on veut, même si ça donne une appréciation interprétable du point de vue de l'usage qu'on en fait (ex : temps de calcul dans les algorithmes de tri). Mais il existe aussi dans la classe ThreadInfo les méthodes +long:getBlockedTime() et +long:getWaitedTime() qui nous retournent le temps qu'un thread a été bloqué ou le temps qu'il a dû attendre pour s'exécuter. Ce que je me demande est pour calculer le temps CPU d'un thread, est-ce qu'on ne pourrait pas calculer un temps approximatif avec une différence entre deux currentTimeMillis() placés aux extrémités d'un bloc de code dont on veut connaître le temps d'exécution, et à cette valeur retirer le temps bloqué et le temps attendu, on peut espérer que ça nous donnera le temps CPU de notre processus. Un leger problème néanmoins : on ne tient pas compte du temps qu'il faudra à la machine pour faire appel aux 2 currentTimeMillsi() et aux deux autres méthodes... C'est à devenir fou, surtout que ça ne résout toujours pas le problème des multithread de la machine virtuelle...
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Razgriz
    Il est spécifié dans l'Api qu'on récupère le thread de la machine virtuelle.
    Le thread courant... et tu peux récupérer celui de n'importe quel thread avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mxBean.getThreadCpuTime(thread.getId());
    a++

  9. #9
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    mouais y a quand même des trucs bizarres, avec cette méthide j'ai des temps négatifs, et ça me donne jamais qqch de cohérent...
    Qqn a un exemple de code avec une instance de thread dont on veut connaitre le temps CPU?
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 41
    Points : 42
    Points
    42
    Par défaut
    Sinon une autre solution est d'utiliser la commande : System.nanoSeconds().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    long debut = System.nanoSeconds()
     
    // exec
     
    long duree =  System.nanoSeconds() - debut

  11. #11
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    nonc'est moche parce que ça ne me donne pas le temps CPU associé à un thread, mais le temps depuis lequel la jvm est lancée... C'est pas ce que je veux.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

Discussions similaires

  1. Temps cpu pour une instruction
    Par akiraa dans le forum C++
    Réponses: 10
    Dernier message: 15/08/2007, 02h15
  2. Mesure du Temps CPU
    Par Fortran90 dans le forum Fortran
    Réponses: 3
    Dernier message: 19/10/2006, 14h00
  3. obtenir le temps en milliseconde sous vc++ 2005
    Par radicalrider dans le forum Visual C++
    Réponses: 2
    Dernier message: 01/08/2006, 00h20
  4. Temps CPU et temps d'éxécution
    Par t_om84 dans le forum Général Python
    Réponses: 1
    Dernier message: 04/09/2005, 12h27
  5. Temps cpu
    Par chama dans le forum Administration système
    Réponses: 5
    Dernier message: 25/07/2005, 11h41

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