返回

刀在砧上,JFR诉说Java进程的酸甜苦辣

后端




前言

事情的起因是这样的。那天我还是像往常一样撸代码,突然看到idea有个Run with Java Flight Recorder的选项。

一款使用了n年的ide竟然还有新发现?真是令人惊讶。于是我兴致勃勃地点击了它。

JVM飞行记录仪

Java Flight Recorder (JFR) 是一个用来记录Java虚拟机(JVM)运行时数据的工具。它可以捕获有关JVM的各种信息,包括内存使用情况、线程状态、类加载情况、垃圾回收情况等等。这些信息可以帮助我们分析Java进程的性能并诊断问题。

案例:启动失败

我怀着忐忑的心情点击了"Run with Java Flight Recorder",然后按下运行按钮,几秒钟后控制台出现了如下信息:

[FlightRecorder] Error occurred during the flight recording session

我的笑容逐渐凝固,心想:这究竟是为什么呢?

于是我打开了jfr.log文件,里面记录着如下错误信息:

java.lang.NoClassDefFoundError: java.nio.file.spi.FileSystemProvider

这个错误信息表明,在启动JVM时,缺少了java.nio.file.spi.FileSystemProvider类。

为什么会缺少这个类呢?我百思不得其解,于是我决定上网搜索一下。

一番搜索之后,我发现这个类是在Java 9中才引入的。而我的Java版本是Java 8,所以才会出现这个错误。

知道了原因之后,我只需要将Java版本升级到Java 9或更高版本,就可以了。

升级之后,我再次尝试运行程序,这次终于成功了。

这次经历让我意识到,在使用JFR之前,一定要确保Java版本是支持JFR的。

JFR的妙用

通过这次经历,我对JFR有了更深入的了解。我认为,JFR是一个非常有用的工具,它可以帮助我们分析Java进程的性能并诊断问题。

JFR的使用场景非常广泛,它可以用于:

  • 分析内存泄漏
  • 分析线程死锁
  • 分析性能瓶颈
  • 诊断JVM崩溃问题

如果您正在开发Java应用程序,那么我强烈建议您学习和使用JFR。

如果您想了解更多关于JFR的信息,可以参考以下资源:

总之,JFR是一个非常值得学习和使用的工具,希望本文能对您有所帮助。

后记

通过这次经历,我学会了以下几点:

  • 在使用JFR之前,一定要确保Java版本是支持JFR的。
  • JFR是一个非常有用的工具,它可以帮助我们分析Java进程的性能并诊断问题。
  • JFR的使用场景非常广泛,它可以用于分析内存泄漏、分析线程死锁、分析性能瓶颈、诊断JVM崩溃问题等。

如果您正在开发Java应用程序,那么我强烈建议您学习和使用JFR。