2017-07-12 2 views
-1

Le problème initial que j'essaie de résoudre est de voir les temps de tous les sous-appels d'une méthode sur plusieurs threads. Mais j'ai répliqué mon problème avec une application minuscule où j'ai un fil qui exécute une méthode qui attend le plus souvent comme prévu.Yourkit Java Profiler: WALL TIME est probablement mal mesurée pour Object.wait()

enter image description here

Comme vous pouvez le voir, je suis particulièrement intéressé par pool-1-fil-2 méthode d'exécution "com.sum. Proxy10.uploadWaiting $()" donc je sais pour sûr que cette méthode passe la plupart de son "WALL TIME" dans getConnection() qui descend à Object.wait (long) Mais alors je veux voir quel est le pourcentage exact de WALL TIME passé dans getConnection() dans com.sum. $ Proxy10. uploadWaiting(). Je aller à "liste Méthode" -> Mon Method-> Fusionnée Programmes appelés

enter image description here

Comme vous pouvez le voir getConnection() est seulement 1% du temps total de ma méthode. Et j'ai configuré mon échantillonnage pour faire des temps de mur pour toutes les méthodes. Comme vous pouvez le voir sur la capture d'écran, ils sont tous marqués comme [Wall Time]. J'utilise Yourkit 2015 build 15052.

Question: pourquoi getConnection() n'affiche-t-il pas quelque chose comme 90%? Est-il encore en train de calculer seulement le temps CPU et non le temps de mur?

Répondre

1

soutien YourKit a répondu à ma question et la réponse est que je dois utiliser

-Dyjp.zero.time.methods = false

afin de rendre l'interface utilisateur affiche l'heure murale appropriée. C'est vrai par défaut et remplace tout, y compris les paramètres de l'heure du mur. il est arrivé à être https://www.yourkit.com/docs/kb/open_huge_snapshot.jsp Pour moi (version MacOS et YourKit 2015)::

<key>JVMOptions</key> 
<array> 
... 
<!-- my fix to the UI--> 
<string>-Dyjp.zero.time.methods=false</string> 
</array> 

L'endroit où le mettre dépend du système d'exploitation et la version de YourKit