【问题标题】:Is my Glassfish setup leaking memory?我的 Glassfish 设置是否泄漏内存?
【发布时间】:2011-10-17 03:29:15
【问题描述】:

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

我认为肯定存在内存泄漏,因此我在使用 JProfiler 监视服务器的同时运行了服务器,并注意到当我的流量达到峰值时,我的内存使用量猛增(如预期的那样),但随后又迅速回落.

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

但是,根据此图表,内存使用率(蓝色)似乎确实随着服务器运行时间的延长而呈上升趋势

我的问题有两个:

  1. 当实际内存使用量在峰值后下降时,有什么方法可以减小堆大小?

  2. 我是否可能确实存在内存泄漏,或者这是否正常?我可以做些什么来进一步调查这种内存使用情况?

【问题讨论】:

    标签: java memory-leaks glassfish heap-memory


    【解决方案1】:

    对于 1. 没有办法做到这一点。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 泄漏是由一个应用程序导致的,该应用程序在一个 servlet 中的一个极少数情况下没有释放 JDBC 连接。 VisualVM 帮我找到了它——谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2012-09-13
      • 2020-07-22
      • 2010-10-13
      • 2019-01-28
      • 2015-02-07
      相关资源
      最近更新 更多