Java / Tomcat不使用垃圾回收

18 浏览
0 Comments

Java / Tomcat不使用垃圾回收

我正在开发一个在Tomcat上运行的Java Spring - Hibernate web应用程序。由于应用程序的性质,我在之前开发的其他应用程序中从未遇到过内存/堆问题。\n我的应用程序是一种分析web工具,可以管理大量的数据,大多数情况下这些数据最终会在演示层使用Highcharts(JavaScript图表库)绘制出来。当我第一次在Tomcat上测试它时,它在第二个请求之后崩溃了,从那时起我一直在追踪内存使用情况。我不是Tomcat的专家,但我认为问题可能在垃圾回收器周围。\nNetBeans 8.1提供了一个内存分析工具,在我的应用程序上运行时显示如下内容:\n\"enter\n正如你所看到的,消耗的内存量非常高,考虑到它只处理一个用户的数据。你可以清楚地看到每次我发送请求时内存的增加。一旦请求完成并且页面加载了所有的图表,使用的内存会稍微下降,但它永远不会降到接近0的水平。更重要的是,每次请求之后,内存都会下降到一个更高的点,这在长期来看是不可持续的。\n正如你在下面的Firebug截图中所看到的,通过ajax调用发送到浏览器的数据量并不是很大:\n\"enter\n从服务器发送1.7 MB的数据耗时4.5秒,涉及数据库访问和其他领域操作。正如你在Firebug中看到的,有几个ajax调用,每个调用都属于一个Highcharts图表。\n我认为垃圾回收器工作不正常,但我不确定。所有的JVM和Tomcat配置都是默认的。\n你觉得呢?\n编辑:\n我已经检查了我所有的数据库访问,并且确保连接被适当地处理。关于会话数据,存储的数据量不多,并且在每次请求时都会被覆盖(我的应用程序作为一个报告应用程序工作,因此每次报告执行的会话数据都会在下一个请求中被覆盖)。

0
0 Comments

48小时的工作后,我发现了问题的原因:由于静态方法和变量的管理不当导致了内存泄漏。虽然这只适用于我的情况,但我认为一些关于使用NetBeans分析器的参考资料可能会帮助到其他人:

NetBeans分析器

Stackoverflow帖子中的教程

希望能帮助到其他人!

0