l0r*_*c10 4 java profiling out-of-memory
我得到一个 OutOfMemoryError: Java heap space
有什么工具可以用来找出根本原因吗?
您可以使用诸如 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)