gpt4 book ai didi

java - 调查 Java JIT 其他内存

转载 作者:行者123 更新时间:2023-11-30 10:11:59 26 4
gpt4 key购买 nike

我正在调查在由 mesos marathon 编排的 docker 容器中运行的 java 应用程序的内存不足问题。

  • 容器设置为2GB内存
  • JVM 堆显式设置为最小 1Gb 和最大 1.5GB
  • 持续测试工作负载,然后是最终的容器退出代码 137 (OOM)。
  • 在测试开始时和 1 小时后比较了两个 javacore,注意到称为 JIT“其他”的东西具有最大的增量
  • 未发现 JVM 堆使用问题

初始

2MEMUSER      +--JIT: 318,789,520 bytes / 778 allocations
2MEMUSER | |
3MEMUSER | +--JIT Code Cache: 268,435,456 bytes / 1 allocation
2MEMUSER | |
3MEMUSER | +--JIT Data Cache: 16,777,728 bytes / 8 allocations
2MEMUSER | |
3MEMUSER | +--Other: 33,576,336 bytes / 769 allocations

1小时后

2MEMUSER      +--JIT: 525,843,728 bytes / 8046 allocations
2MEMUSER | |
3MEMUSER | +--JIT Code Cache: 268,435,456 bytes / 1 allocation
2MEMUSER | |
3MEMUSER | +--JIT Data Cache: 62,916,480 bytes / 30 allocations
2MEMUSER | |
3MEMUSER | +--Other: 194,491,792 bytes / 8015 allocations

我想知道使用 Eclipse 内存分析器工具 (MAT) 的核心转储是否可以揭示这个“其他”空间中的内容。

我们已经尝试通过遵循 this discussion 来限制 JIT 内存使用

*-Xjit:disableCodeCacheConsolidation
-Xcodecachetotal128m*

但似乎无法使参数起作用。

我们正在使用IBM JRE 1.8.0 Linux amd64-64(内部版本 8.0.5.17 - pxa6480sr5fp17-20180627_01(SR5 FP17))

能否分享解决 JIT native 内存消耗问题的工具/经验?

最佳答案

您可能在“元空间”内存中发生内存泄漏。这是 JVM 用来保存(例如)JIT 编译类和其他类元数据的堆外内存。

元空间泄漏的几个常见原因是:

  • 由于在开发过程中反复热加载代码而导致类加载器泄漏,或者
  • Proxy 类/对象或类似内容的泄漏。

有一些JVM选项可以限制元空间的大小;例如-XX:MaxMetaspaceSize=256m.


这是关于诊断元空间泄漏的问答:


我刚刚注意到您使用的是 IBM JRE 而不是 Oracle/OpenJDK。所以上面的不是直接适用的。

尽管根本问题很可能是相同的:通过类加载器/热加载或通过代理类泄漏。

关于java - 调查 Java JIT 其他内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52107800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com