我在具有512M
内存的Heroku dyno上调试内存问题。在经过大量的探索和刺激之后,我认为我已经将它缩小到类空间而不是因为某些原因而被清理干净。这是jcmd <pid> VM.native_memory summary
:
Java Heap (reserved=163840KB, committed=163840KB)
(mmap: reserved=163840KB, committed=163840KB)
Class (reserved=1120210KB, committed=80466KB)
(classes #14208)
(malloc=2002KB #18418)
(mmap: reserved=1118208KB, committed=78464KB)
Thread (reserved=26165KB, committed=26165KB)
(thread #45)
(stack: reserved=25776KB, committed=25776KB)
(malloc=144KB #222)
(arena=244KB #89)
Code (reserved=256694KB, committed=42130KB)
(malloc=7094KB #10281)
(mmap: reserved=249600KB, committed=35036KB)
GC (reserved=569KB, committed=569KB)
(malloc=29KB #279)
(mmap: reserved=540KB, committed=540KB)
Compiler (reserved=217KB, committed=217KB)
(malloc=86KB #290)
(arena=131KB #3)
Internal (reserved=3116KB, committed=3116KB)
(malloc=3084KB #16726)
(mmap: reserved=32KB, committed=32KB)
Symbol (reserved=19560KB, committed=19560KB)
(malloc=15812KB #163798)
(arena=3748KB #1)
Native Memory Tracking (reserved=3649KB, committed=3649KB)
(malloc=292KB #4629)
(tracking overhead=3357KB)
Arena Chunk (reserved=198KB, committed=198KB)
(malloc=198KB)
以下是我的JAVA_OPTS
:
-Xmx160m
-Xss512k
-XX:MaxMetaspaceSize=128M
-XX:NativeMemoryTracking=detail
-XX:+UnlockDiagnosticVMOptions
-XX:+UseSerialGC
知道为什么Class
仍然保留了超过一堆内存?再说一遍,我甚至都不确定课堂空间是什么问题,所以任何帮助都会受到赞赏。
请注意,我使用的是一些Groovy代码,在类加载器领域可能相当嘈杂。