捕获-Java堆转储消耗数据

问题描述 投票:0回答:1

我们遇到了 JAVA 内存不足异常。并启用了内存节省模式但无法解决问题

Currentlu 正在寻找 -- 我们是否有一个选项来捕获一周的 Java 堆转储消耗。我们刚刚安装并进行了一些设置,我不知道设置。有人可以协助使用 VisualVM 2.1.9

java out-of-memory visualvm heap-dump node-heapdump
1个回答
0
投票

听起来你的某个地方有内存泄漏。这是当您的程序分配内存但不再需要时从未释放它的情况。有许多做法可能导致内存泄漏,但一个常见的原因是注册事件侦听器并且在其生命周期结束时从未将其删除。

在识别内存泄漏方面对我有很大帮助的是软件分析。您可以使用分析器运行应用程序并收集时间序列指标来确定内存消耗的位置。我个人使用JProfiler,它确实需要付费许可证,但也提供免费试用。它非常容易设置和使用,甚至可以直接集成到您的 IDE 中(在大多数情况下)。

我对应用程序的分析时间从未超过几分钟,因此我不知道在一周内它的表现如何。但是,您可以尝试通过运行探查器并多次触发不同的函数调用来隔离可疑的子例程。这可以通过 GUI、API、模拟事件等来完成。这取决于您正在运行的应用程序的类型。当您重复触发各种函数调用时,请监视配置文件中的内存消耗以查看其是否出现峰值。这将帮助您缩小有问题的子例程列表的范围。

识别出嫌疑人后,重新启动程序,并使用探查器多次触发列表中的每个功能。之后,您可以使用探查器的堆分析工具来识别应用程序中哪些对象消耗了最多的内存。这应该能为您提供足够的信息来确定问题的根源。

© www.soinside.com 2019 - 2024. All rights reserved.