来自命令行的 Java Flight Recorder (JFR) : [jfr] [ERROR] [1014. 291] 关闭时无法删除存储库

标签 java jfr

我正在学习有关 Java Flight Recorder 使用的类(class) java-flight-recorder-monitoring

我从示例编译了 java 代码(添加了 classimports 因为它没有编译它们):

import java.util.ArrayList;
import java.util.List;

class TestFlightRecorder {
public static void main(String[] args) {
    List<Object> items = new ArrayList<>(1);
    try {
        while (true){
            items.add(new Object());
        }
    } catch (OutOfMemoryError e){
        System.out.println(e.getMessage());
    }
    assert items.size() > 0;
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        System.out.println(e.getMessage());
    }
}
}

然后我按照类(class)运行:

C:\Program Files\Java\jdk1.8.0_191\bin>java -XX:+UnlockCommercialFeatures -XX:+F lightRecorder -XX:StartFlightRecording=duration=200s,filename=c:\am\out\flight.j fr -cp c:\am\out TestFlightRecorder

紧接着输出:

Started recording 1. The result will be written to:

C:\AM\out\flight.jfr

java的Windows任务管理器中的内存使用量上升,然后在超过200秒后:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at TestFlightRecorder.main(TestFlightRecorder.java:12) [jfr][ERROR][1014.291] Repository could not be removed at shutdown

生成的 flight.jfr 大小为 0 字节。 (当我使用简单的 hello world java 类执行相同的命令时,创建的 Flight.jfr 大小为 125Kb,其中包含“空”信息 - 我猜这是因为应用程序运行得如此之快,飞行记录尚未开始 - 而这个问题不是关于空虚)。

此类错误的网络搜索没有结果。为什么会出错,我是否做错了什么来进行录音?

最佳答案

当应用程序结束时,Java Flight Recorder 将转储写入 Java 关闭 Hook 中。如果没有足够的内存来生成转储,它将失败。

发生该错误的原因是,当关闭 Hook 线程尝试删除该文件时,该文件仍由 JVM 保留。

关于来自命令行的 Java Flight Recorder (JFR) : [jfr] [ERROR] [1014. 291] 关闭时无法删除存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57712611/

相关文章:

java - 是否可以使用 JFR 和 JMC(JDK Mission Control)可视化每个线程的 CPU 使用情况?

Java Flight Recorder - 如何提取自定义事件字段的值?

java - 如何拦截FlightRecording事件(java)?

java - 如何允许匿名访问@RequestMapping?

java - Android 中微调器中的 NullpointerException

java - 从字符串中读取字节数组并创建图像

java - 覆盖 JApplet 中的绘制方法

java - JMC不显示热门方法和包

Java Flight Recorder 未报告所有 GC 事件

java - 如何找到我的项目中显示的错误。?