当前位置: 首页 > 知识库问答 >
问题:

内存泄漏:如何解决

唐默
2023-03-14

在阅读了大量有关MAT的内容后,我使用我的生产堆转储来分析内存泄漏问题。下面是泄漏报告错误:

线程org.apache.tomcat.util.threads.taskthread@0x6d8be0a30 http-bio-8443-exec-115保留总大小为3,695,816,440(89.03%)字节的局部变量。

内存累积在“'<'System class Loader'>”加载的“java.lang.Object[]”实例中。

主控器树摘要显示了以下内容:

org.apache.tomcat.util.threads.taskthread@0x6d8be0a30 http-bio-8443-exec-115 sh:112 rh:3,695,816,440 prct:89.03%java.util.arraylist@0x6da437cd8 sh:24 rh:3,695,668,184 prct:89.03%java.util.arraylist@0x77da34ee8 sh:7,292,936 rh:3,695,668,160 prct:89.03%com.cjs.persistence.dto.somedto

到GC根的路径显示线程本身。我无法找到是什么导致了这一点,为什么这些DTO列表被保留,以及如何清除它们。任何建议都非常感谢。


共有1个答案

黄元章
2023-03-14

实际上,我们不能这样帮你,如果你想解决泄漏问题,你必须得到许多输入,如gc细节,线程转储等。

不过,我可以建议采取以下措施:

从您的输入中,我可以看出您的泄漏问题是由某个局部变量引起的,该变量通过某种方法被填充,并且它似乎有一个循环或复杂的业务或任何其他因素。

请注意:局部变量的gc根将是其父线程本身。

在这种情况下,您必须获取该线程的stacktrace,它将向您显示该线程正在执行的具体操作,因此您可以从它们开始进行调查。

 类似资料:
  • 问题内容: 我有一个Python程序,它运行一系列实验,没有打算从一个测试存储到另一个测试的数据。我的代码包含一个我完全找不到的内存泄漏(我已经查看了内存泄漏的其他线程)。由于时间限制,我不得不放弃寻找泄漏的机会,但是如果我能够隔离每个实验,该程序可能会运行足够长的时间以产生所需的结果。 在单独的线程中运行每个测试是否有帮助? 还有其他隔离泄漏影响的方法吗? 具体情况详 我的代码分为两部分:实验运

  • 问题内容: 由于GWT是用javascript编译且代码是用JAVA编写的事实,解决GWT内存泄漏的最佳方法是什么? 问题答案: 我可以推荐2件事: 阅读这篇文章 处理完所有引用后,将其无效。 祝好运!

  • 严重:web应用程序创建了一个ThreadLocal,其键类型为[org.apache.log4j.helpers.ThreadLocalMap](值为[org.apache.log4j.helpers.ThreadLocalMap@3ac5b23e])和值类型为[java.util.Hashtable](值为[{userhost=192.168.15.90,userid=127,username

  • 问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是

  • 问题内容: 我一直在追寻内存泄漏(由“ valgrind –leak-check = yes”报告),它似乎来自ALSA。这段代码已经存在于自由世界中一段时间​​了,所以我猜这是我做错的事情。 输出看起来像这样: 并继续一些页面 这是由于我在一个项目中使用ALSA并开始看到这种巨大的泄漏……或者至少是所说泄漏的报告。 所以问题是:是我,ALSA或valgrind在这里遇到问题吗? 问题答案: ht

  • 问题内容: 我有一个长时间运行的脚本,如果让脚本运行足够长的时间,它将消耗系统上的所有内存。 在不详细介绍脚本的情况下,我有两个问题: 是否有可遵循的“最佳实践”,以防止泄漏发生? 有什么技术可以调试Python中的内存泄漏? 问题答案: 看看这篇文章:跟踪python内存泄漏 另外,请注意,垃圾收集模块实际上可以设置调试标志。看一下功能。此外,请查看Gnibbler的这段代码,以确定调用后已创建