Jvm 如何知道在hotspot中编译类或方法花费了多少时间?
1,我想知道JIT期间在hotspot中编译类或方法花费了多少时间(我们遇到了一些超时问题,我们怀疑这可能是由于编译时间过长造成的)?这次是否有跟踪标志或其他跟踪方式Jvm 如何知道在hotspot中编译类或方法花费了多少时间?,jvm,jit,jvm-hotspot,Jvm,Jit,Jvm Hotspot,1,我想知道JIT期间在hotspot中编译类或方法花费了多少时间(我们遇到了一些超时问题,我们怀疑这可能是由于编译时间过长造成的)?这次是否有跟踪标志或其他跟踪方式 2,顺便说一句,如果该方法第一次运行,那么编译时间将是0,因为完全没有编译过程,对吗 JVM标志:-XX:+printcomilation-XX:+UnlockDiagnosticVMOptions-XX:+printcomilation2 289 425 4 java.time.LocalDat
2,顺便说一句,如果该方法第一次运行,那么编译时间将是0,因为完全没有编译过程,对吗 JVM标志:
-XX:+printcomilation-XX:+UnlockDiagnosticVMOptions-XX:+printcomilation2
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编译器在后台工作;不太可能导致延迟或超时
- 通常有多个编译器线程<代码>打印编译输出可能出现交错
- 一个方法可以使用不同的优化级别多次(重新)编译
-XX:+printcomilation-XX:+UnlockDiagnosticVMOptions-XX:+printcomilation2
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编译器在后台工作;不太可能导致延迟或超时
- 通常有多个编译器线程<代码>打印编译输出可能出现交错
- 一个方法可以使用不同的优化级别多次(重新)编译
我们发现,在部署\启动应用程序之后,当同时有一个大客户机请求时,我们在客户机中遇到了许多超时错误,因此我们假设该问题可能是由于长时间的类加载或方法编译造成的,我不知道这个故障排除方向是否正确,您能给出一些建议吗?顺便说一句,当方法正在编译时,对该方法的请求是否会被阻止?或者它仍在执行解释,并在编译完成时切换到编译版本?@Jason compilation不会阻止方法执行。解释方法时在后台执行。@Jason使用探查器查找性能问题的原因。Andrei,我可以知道github.com/jvm-profiling-tools/async-profiler是否支持分析阻塞问题吗?或者它只是配置CPU时间?例如,方法等待IO操作完成的时间百分比。我们知道一些性能问题是由高CPU引起的,但是其他问题是由锁或IO阻塞引起的。我们得到的问题是,在部署\启动应用程序之后,当同时有一个大型客户端请求时,我们在客户端中遇到了许多超时错误,所以我们假设这个问题可能是由长时间的类加载或方法编译引起的,我不知道这个故障排除方向是否正确,您能给出一些建议吗?顺便说一句,当编译中的方法时,对该方法的请求是否会被阻止?或者它仍在执行解释,并在编译完成时切换到编译版本?@Jason compilation不会阻止方法执行。解释方法时在后台执行。@Jason使用探查器查找性能问题的原因。Andrei,我可以知道github.com/jvm-profiling-tools/async-profiler是否支持分析阻塞问题吗?或者它只是配置CPU时间?例如,方法等待IO操作完成的时间百分比。我们知道一些性能问题是由高CPU引起的,但是其他问题是由锁或IO阻塞引起的。感谢您提供信息,但是我们需要在Prod环境中进行故障排除,我不知道jitwatch是否会对性能产生很大影响。感谢您提供信息,然而,我们需要在Prod环境中进行故障排除,我不知道jitwatch是否会对性能产生很大影响。