分析GWT应用程序以查找内存泄漏

时间:2011-07-27 17:09:41

标签: gwt memory-leaks requestfactory

我们在Tomcat上部署了基于GWT的应用程序。每隔一天,应用程序就会崩溃并出现OutOfMemoryException。所以当它接近使用最大分配内存时,我已经开始接受应用程序的堆转储。

应用程序的行为如下,

  1. 用户登录应用程序
  2. 使用群集设置输入要在服务器上进行分析的应用程序。
  3. 客户端每15秒轮询一次服务器以获取作业状态并更新UI控件。使用requestfactory调用从服务器中提取一些数据来完成轮询。
  4. 如果作业完成,我们会使用flextable将结果显示给用户。可以有大约1000行,每列6列。
  5. 堆转储,

    我们使用jmap进行了tomcat进程的堆转储,以查看内存中的内容。使用带有堆转储的Eclipse Memory Analyzer获取以下图片。

    Overview of the heap dump

    Domiator Tree

    Dominator Tree

    Expanded dominator tree

    我们可以看到堆中保留了大量的hashmap条目,保留大小为25k,其中大约有600万条。

    问题:

    1. com.google.gwt.core.client.impl.WeakMapping显示16的浅堆 字节,但保留的堆几乎是我们分配的所有内存 申请。
    2. 是因为我们每15秒轮询一次服务器并检索以某种方式被引用而不是GCed的数据。
    3. 我们如何取消引用这些hashmap。
    4. 与这里提到的情景完全不同。
    5. 到目前为止,我们在分析应用程序时使用了jconsole,jprofiler,MAT,jhat。我们不知道问题在哪里。

      感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

已经在主干和2.4分支中修复了memory leak in WeakMapping