gpt4 book ai didi

Java事后内存分析

转载 作者:行者123 更新时间:2023-11-29 08:32:04 26 4
gpt4 key购买 nike

我很好奇有没有办法分析java程序的内存使用情况。我的代码因 OutOfMemoryError 而崩溃,所以我想看看到底是什么用完了它。如果有帮助,我正在使用 Intellij IDEA,但我无法真正调试它,因为我正在使用的测试用例来自 txt 文件,而且我不认为 IDEA 有办法在您时重新路由标准输入正在其中运行一个程序。

最佳答案

有几种方法。

Heapdump(内存):

jmap -dump:format=b,file=<heap_dump_filename> <pid>

线程转储:

kill -3 

这些是手动调用的,您可以按需生成文件。当您想查看应用程序随时间的变化情况时很有用。

在您的 Java 进程中,您可以设置这些变量以使其在检测到 OoO 错误时自动执行:

+HeapDumpOnOutOfMemoryError

更多信息:https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/clopts.html

现在,所有这些文件都可以被 MAT 之类的东西读取: https://www.eclipse.org/mat/

您还可以使用 SDK 附带的 Java VisualVM 读取线程转储:https://docs.oracle.com/javase/7/docs/technotes/guides/visualvm/index.html

HeapDumps 将帮助您分析内存泄漏、堆问题和垃圾收集器问题。通过线程转储,您可以查看是否有线程阻塞或大量 IO 操作使服务器停滞。 (通常很多日志调用)。

最后,MAT 在读取 4 GB 或更大的大堆时可能会遇到一些问题。我也时常使用 IBM 堆分析器:https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

我通常乐于分析这些类型的问题。祝你好运!

关于Java事后内存分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com