我正在调查在由mesos马拉松精心策划的docker容器中运行的Java应用程序的内存不足问题。
初始
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 Memory Analyzer Tool(MAT)进行的核心转储是否可以阐明“其他”空间中的内容。
我们尝试通过遵循this discussion
来限制JIT内存的使用*-Xjit:disableCodeCacheConsolidation
-Xcodecachetotal128m*
但似乎无法使args正常工作。
我们正在使用 IBM JRE 1.8.0 Linux amd64-64(内部版本8.0.5.17-pxa6480sr5fp17-20180627_01(SR5 FP17))
人们可以分享一些工具/经验来解决JIT本机内存消耗问题吗?
答案 0 :(得分:1)
“元空间”内存中可能存在内存泄漏。这是JVM用来保存(例如)JIT编译的类和其他类元数据的堆外内存。
元空间泄漏的几种常见原因是:
Proxy
个类/对象或类似对象。有一些JVM选项可以限制元空间的大小。例如-XX:MaxMetaspaceSize=256m
。
以下是有关元空间泄漏诊断的问答:
我刚刚注意到您使用的是IBM JRE,而不是Oracle / OpenJDK。因此以上内容并不直接适用。
但根本问题可能是相同的:通过类加载器/热加载或通过代理类泄漏。