2017-08-29 4 views
0

1, je veux savoir combien de temps a passé à compiler une classe ou une méthode dans hotspot pendant JIT (Nous avons un certain problème de délai d'attente et nous suspectons qu'il peut être causé par une longue compilation)? Existe-t-il un indicateur de trace ou d'autres moyens de tracer cette période?Comment savoir combien de temps a passé à compiler une classe ou une méthode dans un hotspot?

2, BTW, si la méthode s'exécute la première fois, alors le temps de compilation serait de 0 car il n'y a aucun processus de compilation, n'est-ce pas?

Répondre

2

drapeaux JVM: -XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation2

289 425  4  java.time.LocalDate::until (116 bytes) 
    292 360  3  java.time.ZoneId::of (85 bytes) made not entrant 
    293 426  4  java.time.LocalDate::from (68 bytes) 
    293 386  3  java.time.LocalDate::from (68 bytes) made not entrant 
    293 426 size: 248(96) time: 0 inlined: 54 bytes 
    297 425 size: 3688(2272) time: 8 inlined: 1092 bytes 
    ^^  ^   ^  ^
    | |   |    |   | 
    | |   compiled bytes |   bytecodes inlined 
    | compilation ID    method compilation time (ms) 
    timestamp (ms from JVM start) 

Notez que

  • compilateur JIT fonctionne en arrière-plan pendant que l'application est en cours d'exécution; il est peu probable que cela cause des délais ou des délais.
  • Il existe généralement plusieurs threads du compilateur; PrintCompilation La sortie peut apparaître entrelacée.
  • Une méthode peut être (re) compilée plusieurs fois avec un niveau d'optimisation différent.
+0

Nous avons eu la question juste après le déploiement \ démarrage de l'application, nous avons eu beaucoup d'erreurs de délai d'attente dans les clients quand il y a une grande demande des clients en même temps, donc nous supposons cette question peut-être causé par une longue charge de classe de temps ou de la méthode compilation, je n'ai aucune idée si cette direction de dépannage est bonne, pouvez-vous donner quelques suggestions? –

+0

BTW, lorsque la méthode en cours de compilation, si la demande à cette méthode serait bloquée? ou encore en train de faire l'interprétation, et passer à la version compilée quand la compilation est terminée? –

+0

@Jason La compilation ne bloque pas une méthode d'exécution. C'est fait en arrière-plan pendant qu'une méthode est interprétée. – apangin

0

jitwatch peut enregistrer et afficher des journaux de compilation jit.

jitwatch screenshot with log

+0

Merci de fournir les informations, mais nous avons besoin de faire le dépannage dans l'environnement Prod, je ne sais pas si jitwatch aurait de gros effets sur les performances. –