【问题标题】:Java program is consuming lot of memory (growing 1.5 times of Xmx)Java程序消耗大量内存(增长Xmx的1.5倍)
【发布时间】:2011-12-21 23:57:03
【问题描述】:

我有一个 java 程序(做很多内存操作)。我已经为进程(-Xmx)分配了 10GB 的 Java 堆。系统总内存为 30 GB。 Java 程序实际上占用了将近 24 GB 的内存(我可以从 svmon 输出中看到)。 Java 堆利用率低于 10 GB(来自详细 GC)。我想知道剩余的内存(24-10 = 14 GB 内存)在使用什么?是本机堆吗? (我没有任何 JNI 代码或任何其他可以使用 JNI 代码的第三方库)。您能告诉我如何监控本机内存使用情况吗?

操作系统:AIX

Java:IBM JVM 1.6

CPU : 电源 7 SMT -4

【问题讨论】:

标签: java jvm aix heap-dump


【解决方案1】:

另一种类型的内存是非堆内存。尝试使用JConsole 监控情况。

在这个page about YourKit我读到:

非堆内存大小的异常增长可能表明存在潜在问题,在这种情况下您可以检查以下内容:

  • 如果存在类加载问题,例如泄漏的加载器。在这种情况下,可以借助类加载器视图来解决问题。
  • 如果有字符串被大量拘留。对于此类问题的检测,可以使用分配记录。

【讨论】:

  • 不幸的是,这是一个生产箱,我无法在那个箱中运行 Jconsole。所有端口都已关闭,因此我无法使用 jconsole (jmx) 进行远程连接。有没有其他方法可以生成 gc 日志并从日志中识别?
  • 我发现了这个Java Garbage Collection Log Messages... 我想这样的log on a running box会包含很多信息。分析起来会很困难。如果可能,最好尝试在测试环境中重现问题。
  • 我已经使用 IBM support Assistant 工具分析了 GC 日志。但它没有显示任何非堆(本机堆)利用率。有没有具体的参数可以生成原生堆内存相关信息?
【解决方案2】:

您是否使用过任何分析器?这将帮助您确定哪些对象正在消耗内存以及 RAM 中发生了什么

【讨论】:

  • 不是因为 java 对象。
【解决方案3】:

感谢您的记忆。

我只是把这个放在这里:https://www.ibm.com/developerworks/java/library/j-nativememory-aix/

【讨论】:

    【解决方案4】:

    IBM JMAT 是一个很好的工具,但需要分析大量内存。您对您正在使用的内存量是否适合您正在操作的对象的确定程度如何?有了这么大的调用堆栈,我会开始探测泄漏的引用。

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 2021-03-29
      • 2022-01-06
      • 1970-01-01
      • 2016-06-30
      • 2011-04-25
      • 2018-04-27
      • 1970-01-01
      相关资源
      最近更新 更多