当前位置: 首页 > 知识库问答 >
问题:

关闭时无法从命令行[JFR][ERROR][1014.291]存储库中删除Java飞行记录器(JFR)

傅越
2023-03-14

我将学习Java飞行记录器使用Java飞行记录器监控的课程。

我根据示例编译了一个java代码(添加类和导入,因为它没有编译出它们):

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());
    }
}
}

然后我按照路线运行:

C:\Program Files\Java\jdk1.8.0_191\bin

紧接着输出:

已开始录制1。结果将写入:

C:\AM\out\flight.jfr

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

线程“main”java.lang.OutOfMemoryError中出现异常:TestFlightRecorder处的java堆空间。main(TestFlightRecorder.java:12)[jfr][ERROR][1014.291]存储库在关闭时无法删除

以及由此产生的<代码>飞行。jfr的大小为0字节。(当我用简单的hello world java类发出相同的命令时,flight.jfr是用125Kb大小创建的,里面有“空”信息——我想这是因为应用程序工作得如此之快,飞行记录还没有启动——这个问题与空无无关)。

在Web上搜索此类错误时没有结果。为什么出错,我做了什么错误的记录?

共有2个答案

郑俊材
2023-03-14

亚伦的评论暗示:

OOMError可能会破坏JVM,以至于飞行记录器无法写入

我以20s而不是200s的重新编码时间运行代码(在任务管理器中,我看到java内存使用量在大约那个时间内增长到2Gb的最大堆),并得到了与本课程中所示类似的图形记录。所以我认为当前问题已经解决。

皇甫建木
2023-03-14

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

发生错误是因为当关闭挂钩线程尝试删除文件时,文件仍由JVM保存。

 类似资料:
  • 我使用Java任务控制创建了一个配置文件,该配置文件启用了分配分析。当我从JMC UI使用它进行记录时,一切正常,我得到了结果。 然而,在导出设置并尝试在命令行上使用JFR记录之后,我没有记录分配,即使我得到了其他分析信息。 我使用以下设置运行录制:

  • 问题内容: 我正在尝试从redis- cli关闭我的redis服务器。每当我从客户端发出命令时,都会收到错误“(错误)需要NOAUTH身份验证”。我已经尝试过命令“关闭”和“关闭未保存”。 我也尝试从另一个终端窗口尝试“ redis-server stop”,但收到错误“#致命错误,无法打开配置文件’stop’” 如何关闭该服务器?(我在OSX上)。 问题答案: 您的Redis服务器显然已配置了密

  • 我没有得到“你好”:请想知道为什么和做什么

  • 我在从命令行运行一个java程序时遇到了严重的麻烦。我觉得我已经接近弄清楚哪里出了问题,但我只是不知所措,我需要帮助。 我正在尝试用以下命令运行一个简单的Hello World程序(在windows上的VSCode中,使用bash terminal): 这根本不起作用,但是,写入文件的完整路径确实起作用,所以像这样的东西是起作用的。 此外,使用F5运行文件也可以正常工作。我希望用命令行参数运行我的

  • 问题内容: 我试图从Java 运行命令而没有成功。这是我的Java代码: 我也尝试过: 问题是,如果我打印出的内容并在终端中运行它,它将起作用。由于某种原因,它只是不从Java执行。更清楚地说,当我直接从终端运行命令时,“ items.xml”文件就会更改。当我从Java运行它时,文件不会更改。我已验证该命令正确无误,如下所示。 我想念什么吗? cmd的输出是 **编辑 我根据以下评论进行了以下更