首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFR:读取.jfr文件时的OutOfMemoryError

JFR:读取.jfr文件时的OutOfMemoryError
EN

Stack Overflow用户
提问于 2021-10-18 12:50:00
回答 2查看 104关注 0票数 2

我正在尝试分析我之前创建的一个大的飞行记录器文件(1.5 GB)。当执行jfr print命令时,该工具运行到一个OutOfMemoryError中:

代码语言:javascript
复制
$ jfr print --events "jdk.CPULoad" <file>

jfr print: unexpected internal error, Java heap space
java.lang.OutOfMemoryError: Java heap space
    at jdk.jfr/jdk.jfr.consumer.ParserFactory$CompositeParser.parse(ParserFactory.java:283)
    at jdk.jfr/jdk.jfr.consumer.ParserFactory$ArrayParser.parse(ParserFactory.java:268)
    at jdk.jfr/jdk.jfr.consumer.ParserFactory$CompositeParser.parse(ParserFactory.java:285)
    at jdk.jfr/jdk.jfr.consumer.ChunkParser.fillConstantPools(ChunkParser.java:141)
    at jdk.jfr/jdk.jfr.consumer.ChunkParser.<init>(ChunkParser.java:71)
    at jdk.jfr/jdk.jfr.consumer.ChunkParser.<init>(ChunkParser.java:56)
    at jdk.jfr/jdk.jfr.consumer.RecordingFile.findNext(RecordingFile.java:253)
    at jdk.jfr/jdk.jfr.consumer.RecordingFile.<init>(RecordingFile.java:108)
    at jdk.jfr/jdk.jfr.internal.tool.EventPrintWriter.print(EventPrintWriter.java:71)
    at jdk.jfr/jdk.jfr.internal.tool.Print.execute(Print.java:165)
    at jdk.jfr/jdk.jfr.internal.tool.Main.main(Main.java:84)

有没有办法增加jfr工具本身的堆大小(-Xmx)?我在文档中没有找到相应的选项。如有任何帮助,我们将非常感谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-18 13:21:05

正如克里斯所建议的,可以使用一个环境变量:JAVA_TOOL_OPTIONS

在我的例子中,以下代码做到了这一点:

代码语言:javascript
复制
export JAVA_TOOL_OPTIONS="-Xmx5G"
票数 2
EN

Stack Overflow用户

发布于 2021-10-18 19:12:09

您还可以使用-J前缀传递JVM选项,例如:

代码语言:javascript
复制
$ jfr -J-Xmx3048m print --events "jdk.CPULoad" <file> 

通常情况下,文件大小并不重要。数据以块的形式出现,每个块大约10-15MB,当新的块开始时,内存被释放,但是看起来所有的东西都在一个块中,可能是因为它是在非常短的时间内发出的,所以JVM没有机会轮换文件。

未来版本的JDK可能允许过滤,即将所有CPULoad事件提取到一个文件中。https://bugs.openjdk.java.net/browse/JDK-8269767

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69616385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档