2017-08-29 73 views
0

1,我想知道在JIT期间花费多少时间在热点上编译类或方法(我们遇到了一些超时问题,并且我们怀疑这可能是由于编译时间过长造成的)?有没有跟踪标志或其他方式来跟踪这一次?如何知道在热点中编译类或方法花费了多少时间?

2,顺便说一句,如果该方法第一次运行,那么编译时间将为0,因为完全没有编译过程,对吗?

回答

2

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) 

注意

  • JIT编译器在应用程序运行时在后台工作;这不可能导致延迟或超时。
  • 通常有多个编译器线程; PrintCompilation输出可能会出现交错。
  • 一种方法可以用不同级别的优化(重新)编译多次。
+0

我们得到了刚刚部署\启动应用程序后,我们的客户有许多超时错误时有大量的客户端请求并发的问题,所以我们想,也许通过长时间类负载或方法造成的问题编译,我不知道这个故障排除的方向是否正确,你能否提出一些建议? –

+0

顺便说一句,当编译的方法,如果该方法的请求将被阻止?或者它仍在执行解释,编译完成后切换到编译版本? –

+0

@Jason编译不会阻止执行的方法。它在后台完成,而方法被解释。 – apangin

0

jitwatch可以记录和显示jit编译日志。

jitwatch screenshot with log

+0

谢谢您提供的信息,但是我们需要在产品环境中进行故障排除,我不知道jitwatch是否会有很大的性能影响。 –

相关问题