Java/Tomcat 不使用垃圾收集

标签 java tomcat memory-management highcharts garbage-collection

我正在开发一个在 Tomcat 上运行的 Java Spring - Hibernate 网络应用程序。由于应用程序的性质,我遇到了以前在我开发的其他应用程序上从未遇到过的内存/堆问题。 我的应用程序是一种分析网络工具,它管理大量数据,这些数据大多数时候最终使用 Highcharts(用于网络图表的 JavaScript 库,引用 here)绘制在表示层中。 当我第一次开始在 Tomcat 上测试它时,它在第二次请求后崩溃了,从那以后我一直在跟踪内存使用情况。我不是 Tomcat 的专家,但我相信问题可能出在垃圾收集器周围。 NetBeans 8.1 带来了一个内存分析器,它在我的应用程序上运行时显示以下内容:

enter image description here

如您所见,考虑到它只处理一个用户,消耗的内存量确实很高。你可以清楚地看到我每次请求时内存的增加。一旦请求完成并且页面充满了所有图表,使用的内存会下降一点点,但它永远不会下降到接近 0。更重要的是,在每次请求之后,内存都会下降一个更高的点,使得它在长期内不可持续学期。 正如您在下面的 Firebug 屏幕截图中看到的那样,通过 ajax 调用发送到浏览器的数据量并不大:

enter image description here

从服务器发送 1.7 MB 需要 4.5 秒,涉及数据库访问和其他域操作。正如您在 Firebug 中看到的那样,有几个 ajax 调用,每个调用都属于一个 Highcharts 图表。 我相信垃圾收集器工作不正常,但我不确定。所有 JVM 和 Tomcat 配置都是默认配置。 你怎么看?

编辑: 我检查了我所有的数据库访问,我确信连接得到了适当的处理。关于 session 数据,存储的数据不多,并且在每次请求时都会被覆盖(我的应用程序用作报表应用程序,因此每次报表执行的所有 session 数据都会在下一个请求时被覆盖)。

最佳答案

在处理这个问题 48 小时后,我想我找到了问题所在:由于静态方法和变量管理不善导致的内存泄漏。虽然这对我来说是特殊情况,但我认为一些帮助我使用 NetBeans 探查器的引用可以帮助其他人:

NetBeans profile

Stackoverflow post with tutorial

希望对其他人有帮助!

关于Java/Tomcat 不使用垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28945713/

相关文章:

java - 如何正确关闭方法内的 Scanner 类?

java - 获得 Future<T> 对象的进度的能力

maven - Tomcat VirtualWebappLoader 停止为 Java 类工作

c++ - std::vector<std::aligned_storage> 格式错误吗?

java - 单击 boolean 值更改按钮

java - 服务器关闭时远程启动 GlassFish v3

security - 如何在使用容器管理的安全性时从数据库中检索用户名、密码和角色而不是从 tomcat-user.xml 中检索它们

java - 将 java 文件导入 jsp - 无法解析为类型错误

c++ - 释放嵌入式应用程序中的内存无助于减少虚拟存储

c++ - 具有非 POD 对象的 GLib 异步队列