Java / Tomcat不使用垃圾收集

时间:2015-03-09 15:25:37

标签: java tomcat memory-management highcharts garbage-collection

我正在开发一个在Tomcat上运行的Java Spring - Hibernate Web应用程序。由于应用程序性质,我遇到了内存/堆问题,我以前从未在我开发的其他应用程序上遇到过。 我的应用程序是一种分析Web工具,它使用Highcharts(Web图表的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配置都是默认配置。 你觉得怎么样?

修改 我检查了所有数据库访问,我确信连接是适当处理的。关于会话数据,存储的数据不多,并且每次请求都会覆盖它(我的应用程序作为报表应用程序工作,因此下次请求时会覆盖每个报表执行的所有会话数据)。

1 个答案:

答案 0 :(得分:0)

在处理这个问题48小时后,我想我发现了问题:由于静态方法和变量管理不当导致内存泄漏。虽然这对我来说很特殊,但我认为一些帮助我使用NetBeans探查器的参考资料可以帮助其他人:

NetBeans profile

Stackoverflow post with tutorial

希望它可以帮助别人!