OutOfMemoryError java堆空间分析工具

l0r*_*c10 4 java profiling out-of-memory

我得到一个 OutOfMemoryError: Java heap space

有什么工具可以用来找出根本原因吗?

Bhe*_*ung 5

您可以使用诸如 eclipse mat 之类的分析工具来分析应用程序的堆转储,以查看什么消耗了多少堆。

但首先您需要获取应用程序的堆转储。

要在发生 OOM 错误时让JVM自动为您生成堆转储,您可以使用该-XX:+HeapDumpOnOutOfMemoryError选项。最重要的是,您还可以使用该-XX:HeapDumpPath选项来告诉 JVM 生成文件的位置。

java -XX:HeapDumpPath="D:\heapdumps\YourApp.hprof" -XX:+HeapDumpOnOutOfMemoryError -jar YourApp.jar
Run Code Online (Sandbox Code Playgroud)

生成该文件后,您可以在 mat 中打开它并进行分析。


您还可以在应用程序运行时随时手动生成堆转储。为此,您可以使用jmapjdk 附带的命令。

jmap -dump:live,format=b,file="D:\heapdumps\YourApp.hprof" process_id_of_your_app
Run Code Online (Sandbox Code Playgroud)

您可以使用jpsjdk 附带的工具 -轻松查找应用程序的进程 ID。

jps -m
Run Code Online (Sandbox Code Playgroud)