2011-07-27 57 views
1

我们有一个基于GWT的应用程序部署在Tomcat上。每隔一天,应用程序就会与OutOfMemoryException一起崩溃。所以,当它接近使用最大分配内存时,我已经开始使用应用程序的堆转储。分析查找内存泄漏的GWT应用程序

应用程序的行为是下面,对应用

  • 进入输入到其是使用群集安装在服务器上被ananlyzed应用

    1. 用户日志。
    2. 客户机每15秒轮询一次服务器的状态并更新UI控件。轮询是使用requestfactory调用从服务器拉取一些数据完成的。
    3. 如果工作完成,我们使用可弯曲的方式向用户显示结果。可以有大约1000行,6列。

    堆转储,

    我们采取了使用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秒轮询一次服务器并检索某种被引用而不是GC的数据。
    3. 我们如何重新引用这些hashmap。
    4. 与这里提到的场景完全不同吗?

    我们到目前为止在分析应用程序时使用了jconsole,jprofiler,MAT,jhat。我们不知道问题出在哪里。

    感谢您的帮助。

  • 回答

    3

    有一个memory leak in WeakMapping已被固定在主干和2.4分支。

    +0

    我要去尝试gwt2.4。将更新一次,我有这方面的一些数据。 – Kathir

    +0

    rc1是否有解决这个问题?我正在尝试使用rc1,看起来没有任何变化。 – Kathir

    +0

    [RC1](http://code.google.com/p/google-web-toolkit/source/detail?r=10464)必须有更改,因为它在[修复](http:/ /code.google.com/p/google-web-toolkit/source/detail?r = 10344) –