内容目录
一、JFR 概览
二、找出瓶颈
不同的应用有不同的瓶颈。对于有些应用,瓶颈可能是等待 I/O 或网络,可能是线程之间的同步,或者是实际的 CPU 使用。对于其他,瓶颈可能是 GC 时间。很可能应用有不止一个瓶颈。
找出应用瓶颈的一个方法是查看 Events
选项卡。这是一个高级选项卡,可以做不少事情。如下图,可以选择自己感兴趣的事件:
Java Flight Recorder(JFR)是一个商业特性,用在生产服务器上是需要商业许可的。
JFR 记录了关于 Java 运行时及运行在其内的 Java 应用程序的详细信息,记录用少量的开销完成。数据是作为时间上的数据点(称为事件)记录的。典型的事件可以是线程等待锁、GC、CPU 周期使用数据等。
在创建飞行记录时,你可以选择哪些事件应当保存,这叫做记录模板。有些模板只保存基本事件,对性能几乎没有影响。其他模板可能有轻微的性能开销,还可能触发 GC 来收集更多信息。通常,超过百分之几的开销是很罕见。
飞行记录可用于调试很大范围的问题,从性能问题到内存泄漏或严重的锁竞争。
一个连续记录是指记录总是开着并保存,例如,过去六小时的数据。如果应用程序陷入问题,你可以转储(dump)这些数据,例如,从过去一小时的,看看出生问题时发生了什么。
连续记录的默认设置是使用记录 profile,开销极低。这个 profile 不收集堆统计信息或(内存)分配性能分析,但仍然收集了很多有用数据。
保持持续录制一直允许是很好的,对于调试非常罕见的问题时非常有用。记录可以用 jcmd
或 JMC
手工转储。你也可以在 JMC 里设置触发器在一些特定的条件被满足后转储飞行记录。
性能分析录制是指记录开着,运行一定时间,然后停止。通常, 性能分析录制允许更多的时间,有可能对性能有较大的冲击。被开启的时间可以被修改,取决于你的 性能分析录制。
使用 性能分析录制 的典型场景如下:
性能分析录制 将给出很多信息,即使你不是在定位特定的问题。 性能分析录制 将给你关于应用程序的很好的视图,可以帮助你找出瓶颈或需要提高的地方。