1
我们有一个基于GWT的应用程序部署在Tomcat上。每隔一天,应用程序就会与OutOfMemoryException一起崩溃。所以,当它接近使用最大分配内存时,我已经开始使用应用程序的堆转储。分析查找内存泄漏的GWT应用程序
应用程序的行为是下面,对应用
- 用户日志。
- 客户机每15秒轮询一次服务器的状态并更新UI控件。轮询是使用requestfactory调用从服务器拉取一些数据完成的。
- 如果工作完成,我们使用可弯曲的方式向用户显示结果。可以有大约1000行,6列。
堆转储,
我们采取了使用JMAP看到正在举行对内存Tomcat进程的堆转储。以下图片是使用Eclipse Memory Analyzer和堆转储进行拍摄的。
我们可以看到,有很多的HashMap的条目被关在具有25K保留大小堆和有600万其中。
问题:
- com.google.gwt.core.client.impl.WeakMapping显示16个 字节浅堆,但保留堆几乎所有我们为应用程序分配 内存。
- 是因为我们每15秒轮询一次服务器并检索某种被引用而不是GC的数据。
- 我们如何重新引用这些hashmap。
- 与这里提到的场景完全不同吗?
我们到目前为止在分析应用程序时使用了jconsole,jprofiler,MAT,jhat。我们不知道问题出在哪里。
感谢您的帮助。
我要去尝试gwt2.4。将更新一次,我有这方面的一些数据。 – Kathir
rc1是否有解决这个问题?我正在尝试使用rc1,看起来没有任何变化。 – Kathir
[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) –