我的Glassfish设置是否泄漏内存?

时间:2011-08-01 02:13:36

标签: java memory-leaks glassfish heap-memory

我有一个运行一些Web应用程序(servlet,JSP,JDBC)的Glassfish v3服务器。我一直注意到,如果我让Glassfish运行很长时间,它将消耗所有可用内存(这是在具有750 MB内存的服务器上运行)。

我认为必须存在内存泄漏,所以我在使用JProfiler监视它的同时运行服务器并注意到当我获得流量高峰时,我的内存使用率会上升(如预期的那样),但随后会迅速下降

我想知道问题是不是内存泄漏问题,而且Glassfish在出现峰值时会扩展其堆大小(这似乎确实发生了),但在实际内存使用量下降时从不减小堆大小。

Graph of heap for Glassfish

但是,基于此图表,当服务器运行时间更长时,内存使用情况(蓝色)似乎趋势向上。

我的问题是双重的:

  1. 当峰值后实际内存使用量下降时,有没有办法让堆大小减少?

  2. 我是否有可能发生内存泄漏,或者这是正常的吗?我该怎么做才能进一步研究这种内存使用情况?

2 个答案:

答案 0 :(得分:1)

For 1.无法做到这一点。

对于2.您可以使用VisualVm查看您实际使用内存的位置。

答案 1 :(得分:1)

它看起来不像是内存泄漏,因为内存会不断增长并且它会真正开始爆炸OOM错误,这很可能是HotSpot编译器将解释代码转换为本机代码,这肯定会声称记忆永远不会回馈,因为这种记忆会传给永恒的一代。

您应该使用JConsole或VisualVM之类的工具来确保这是泄漏而不是其他。