我将学习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上搜索此类错误时没有结果。为什么出错,我做了什么错误的记录?
亚伦的评论暗示:
OOMError可能会破坏JVM,以至于飞行记录器无法写入
我以20s而不是200s的重新编码时间运行代码(在任务管理器中,我看到java内存使用量在大约那个时间内增长到2Gb的最大堆),并得到了与本课程中所示类似的图形记录。所以我认为当前问题已经解决。
当应用程序结束时,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的输出是 **编辑 我根据以下评论进行了以下更