【问题标题】:JVM memory profiling when multiple applications are running on the same JVM多个应用程序在同一个 JVM 上运行时的 JVM 内存分析
【发布时间】:2014-09-20 19:50:32
【问题描述】:

我正在 JBOSS 和 OFBIZ 上运行基于 Web 的 Java 应用程序。我怀疑正在发生一些内存泄漏,因此对运行应用程序以及 JBOSS 和 OFBIZ 的 JVM 进行了一些内存分析。我怀疑垃圾收集没有像应用程序预期的那样工作。

我使用 VisulaVM、JConsole、YourKit 等来进行内存分析。我可以看到使用了多少堆内存、加载了多少类、创建了多少线程等。但我需要知道只有应用程序使用了多少内存、JBOSS 使用了多少以及有多少分别由 OFBIZ 提供。我想知道谁在使用多少内存以及使用模式是什么。这将帮助我确定发生内存泄漏的位置以及需要调整的位置。

但是到目前为止我运行的内存分析器,我无法分别区分每个应用程序的使用情况。你能告诉我哪个工具可以帮助我吗?

【问题讨论】:

    标签: java memory memory-leaks jboss jvm


    【解决方案1】:

    Java 无法做到这一点,因为 Java 运行时没有明确的方式来表示“这是应用程序 A,这是 B”。

    当您在一个 Java VM 中运行多个应用程序时,您只是在运行一个:JBoss。 JBoss 然后有一个非常复杂的类加载器,但您正在分析的应用程序实际上是 JBoss。

    要执行您想做的事情,您必须应用过滤器,但这仅在您的类中存在未在应用程序之间共享的内存泄漏时才有效(因此当com.pany.app.a.Foo 泄漏时,您可以这样做)。

    如果您不能使用过滤器,则必须更仔细地查看数字以了解发生了什么。这意味着您可能不得不让应用服务器耗尽内存,创建一个堆转储,然后查找占用大部分内存的内容并从那里开始工作。

    唯一的另一种选择是安装第二台服务器,在那里只部署一个应用程序并观看它。

    【讨论】:

      【解决方案2】:

      您可以安装和创建 Docker 容器,允许您单独运行进程。这将允许您使用具有相同基础的多个容器,而无需多次安装 JDK。这样做的好处是关注点分离——每个应用程序都可以部署在一个单独的容器中。这样,您就可以分析在 JVM 上运行的任何特定应用程序,因为每个命名空间都提供了一个完全隔离的应用程序运行环境视图,包括进程树、网络、用户 ID 和挂载的文件系统。

      以下是 Docker 的一些资源:

      1. Deploying Java applications with Docker
      2. JVM plus Docker: Better together
      3. Docker

      如果您有任何问题,请告诉我!

      【讨论】:

      • 哇!我不知道有这样的东西存在!谢谢。让我尝试安装并使用它。我会及时通知你。
      • 克尔! :0) 请告诉我结果如何!!
      【解决方案3】:

      另一个用于查找 java 内存泄漏的好工具是Plumbr。您可以免费试用,它会找到 java.lang.OutOfMemoryError 的原因,甚至会显示问题的确切位置以及解决方案指南。

      【讨论】:

        【解决方案4】:

        我探索了各种 Java 内存分析器,发现 YourKit 可以给我最接近的结果。在 YourKit 仪表板中,您可以获得指向正在运行的各个类的链接。因此,如果您熟悉代码库,您就会知道哪个类属于哪个应用程序。您单击任何类,您将看到与之相关的 CPU、内存使用情况。此外,如果您发现任何问题,YourKit 可以帮助您追溯到源 java 文件中的特定代码行!

        如果您将 YourKit 添加到 Eclipse,单击“问题区域”中的对象名称,将突出显示特定源文件中的代码行,这是问题的根源。

        很酷!

        【讨论】:

          猜你喜欢
          • 2015-07-26
          • 2011-09-09
          • 1970-01-01
          • 2017-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多