Java内存泄漏与堆转储信息

Java内存泄漏与堆转储信息,java,memory-leaks,heap,Java,Memory Leaks,Heap,我们遇到了一个与内存有关的问题 我们的监视器显示out服务正在消耗800MiB的内存 我们已经创建了一个堆转储。然而,这个堆转储告诉我们,堆的总大小是41MiB Out服务正在容器内运行。我们已经阅读了很多与java和docker容器相关的问题。然而,我们正试图获得更多的信息 我们怎样才能获得更多关于JavaVM的内存相关信息 有什么想法吗?堆转储报告的内存使用情况与外部监控报告的内存使用情况之间的巨大差异可能是由以下几点造成的。需要注意的事项包括: JVM的内存利用率不仅仅包括Java堆。它

我们遇到了一个与内存有关的问题

我们的监视器显示out服务正在消耗800MiB的内存

我们已经创建了一个堆转储。然而,这个堆转储告诉我们,堆的总大小是41MiB

Out服务正在容器内运行。我们已经阅读了很多与java和docker容器相关的问题。然而,我们正试图获得更多的信息

我们怎样才能获得更多关于JavaVM的内存相关信息


有什么想法吗?

堆转储报告的内存使用情况与外部监控报告的内存使用情况之间的巨大差异可能是由以下几点造成的。需要注意的事项包括:

  • JVM的内存利用率不仅仅包括Java堆。它包括JVM可执行文件和共享库、元空间、本机(malloc)堆和保存线程堆栈的内存段。它还可能包括内存映射文件和与其他进程共享的内存段

  • Java堆使用的内存包括无法访问的对象和当前未分配给对象的空间;i、 e.释放堆空间

  • 如何获得有关Java内存利用率的更多信息

    一个主要来源是:

    • 本节介绍了如何使用
      jcmd
      获得总体情况
    • 提供对Java堆使用情况统计数据和GC的实时监控
    • 可以使用获取堆和GC配置信息、堆直方图和类加载器统计信息
    • GC日志记录可以对GC行为提供有用的见解

    您所指的
    监视器是什么?它是由外部供应商提供的监视器。。。数据被重新收集并显示在grafana仪表板上……最明显的问题是,查看堆转储中的类—分发版看起来像应用程序应该的吗?此外,您还可以尝试将探查器直接连接到应用程序,并尝试实时查看它。也许您可以添加有关此外部提供程序的更多详细信息?从天真的角度来看,这可能只是因为该提供者无法准确地收集信息。此外,如果您自己(从容器内部)监视数据,该数据是否与监视器告诉您的内容相匹配?