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

发布于 2024-11-26 15:49:45 字数 1073 浏览 0 评论 0原文

我们在 Tomcat 上部署了一个基于 GWT 的应用程序。每隔一天,应用程序都会因 OutOfMemoryException 崩溃。因此,当应用程序接近使用最大分配内存时,我开始获取应用程序的堆转储。

应用程序的行为如下:

  1. 用户登录到应用程序
  2. 将输入输入到应用程序,该应用程序将使用集群设置在服务器上进行分析。
  3. 客户端每 15 秒轮询一次服务器以了解作业状态并更新 UI 控件。轮询是使用 requestfactory 调用从服务器提取一些数据来完成的。
  4. 如果工作完成,我们将使用弹性表向用户显示结果。大约可以有 1000 行 6 列。

堆转储,

我们使用 jmap 对 tomcat 进程进行堆转储,以查看占用内存的内容。以下图片是使用 Eclipse Memory Analyzer 和堆转储拍摄的。

堆转储概述

统治者树

统治者树

Expanded dominator tree

我们可以看到堆中保留了很多 hashmap 条目,保留大小为 25k,大约有 6 个其中数以百万计。

问题:

  1. com.google.gwt.core.client.impl.WeakMapping 显示浅堆为 16 bytes 但保留的堆几乎是我们分配的所有内存 对于应用程序。
  2. 是因为我们每 15 秒轮询一次服务器并检索以某种方式被引用而不是 GC 的数据吗?
  3. 我们如何取消引用这些哈希图。
  4. 它与这里提到的场景完全不同吗?

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

感谢您的帮助。

We have a GWT based application deployed on Tomcat. Every other day the application crashes with OutOfMemoryException. So i have started taking the heap dump of the application when it is close to using maximum allocated memory.

The behavior of application is the following,

  1. User Logs in to the application
  2. Enters input to the application which is to be ananlyzed on the server using a cluster setup.
  3. The client polls the server every 15 seconds for the status of the job and updates the UI controls. The polling is done using requestfactory calls pulling some data from server.
  4. If the job is done , we display the results to the user using a flextable. There can be around 1000 rows with 6 columns.

Heap Dump,

We took a heap dump of the tomcat process using jmap to see what is holding on to the memory. The following pictures are taken using Eclipse Memory Analyzer with the heap dump.

Overview of the heap dump

Domiator Tree

Dominator Tree

Expanded dominator tree

We can see that there are lots of hashmap entries being kept in the heap with retained size of 25k and there are about 6 million of them.

Questions:

  1. com.google.gwt.core.client.impl.WeakMapping shows shallow heap of 16
    bytes but the retained heap is almost all the memory we allocated
    for the application.
  2. Is it because we are polling the server every 15 seconds and retrieving data which is somehow being referenced and not GCed.
  3. How do we unreference these hashmap.
  4. Is it anything completely different from the scenarior mentioned here.

We have so far used jconsole, jprofiler, MAT, jhat in analyzing the application. And we have no clue where the issue.

Appreciate your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

々眼睛长脚气 2024-12-03 15:49:45

WeakMapping 中存在内存泄漏 已固定在主干和 2.4 分支上。

There was a memory leak in WeakMapping which has been fixed in trunk and the 2.4 branch.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文