我们的非堆内存一直在增长。所以我们必须每 3 天重新启动我们的 jee (java8) - webapp(如您在此处的屏幕截图中所见:screenshot from non-heap- and heap-memory)
我已经尝试找出是什么填满了那个非堆。但是我找不到任何工具来创建非堆转储。您知道我如何对此进行调查以找出哪些元素在不断增长吗?
java 版本
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
tomcat 版本
Apache Tomcat Version 7.0.59
最佳答案
非堆内存使用情况,由 MemoryPoolMXBean 提供计算以下内存池:
- 元空间
- 压缩类空间
- 代码缓存
换句话说,标准的非堆内存统计包括编译方法和加载类占用的空间。最有可能的是,增加的非堆内存使用表明类加载器泄漏。
使用
jmap -clstats PID
转储类加载器统计信息;jcmd PID GC.class_stats
打印每个加载类的内存使用情况的详细信息。后者需要-XX:+UnlockDiagnosticVMOptions
。
关于Java:非堆内存分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329455/