【问题标题】:memory leaks on glassfishglassfish 内存泄漏
【发布时间】:2015-08-24 06:57:13
【问题描述】:

我有在Glassfish 上运行的网络应用程序。从 Web 应用程序代码开始有新线程。我在linux 中运行“top”命令并查看glassfish.jar 进程列表.. 如何识别,这是我从代码运行的线程还是这个系统 glassfish 线程?

第二个问题如下:

应用程序启动和 20-20 分钟后 1-4 个线程有 20-90% 的 CPU 功率(通常我有 200% - 2 核) 那么,如果问题仍然存在于我的代码中,我该如何发现内存泄漏?

注意:我无法打开我的应用网页界面,glassfishadmin console 和其他选项。

【问题讨论】:

  • 对我来说,这不是内存泄漏问题。可能是堆配置问题
  • 在那台机器上运行模拟应用程序和其他实现我的代码,我认为问题留在代码中

标签: java multithreading memory-leaks glassfish


【解决方案1】:

Here你有 Oracle 提供的关于如何在 Glassfish 上设置和开始分析的文档

【讨论】:

    【解决方案2】:

    如果 glassfish 实例内存不足,则无法通过 asadmin 将其停止。你必须使用你的操作系统工具来杀死它。 (杀死/任务管理器/其他)。

    要跟踪内存泄漏,请考虑使用VisualVM。您可以监控您的应用程序、获取堆快照和搜索 gc 根。您还可以分析您的应用程序并找到热点(花费时间最多的地方)。

    但请注意:Glassfish 本身就是一块内存海绵,在取消部署/重新部署时无法正确释放内存。要解决这些 glassfish 内部问题,您可以使用 ContextListener 来查看和释放内存挂钩,如下所示:A ContextListener to free glassfish memory leaks

    如果导致负载的线程是您的线程,请重新考虑您的设计:JEE 应用程序不得启动线程。通常您可以使用 EJB 计时器来实现相同的功能(启动线程)。

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2013-01-20
      • 2011-10-31
      • 2019-08-10
      相关资源
      最近更新 更多