Java:非堆内存分析

标签 java memory-leaks jvm

我们的非堆内存一直在增长。所以我们必须每 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/

相关文章:

java - android 网络服务 mysql

ios - AFNetworking 代码给我内存泄漏

bash - 如何防止 BASH_REMATCH 泄漏出函数?

java - JVM内存足够但频率full gc

scala - 如何收集错误是scala,然后将所有错误汇总在一起

java - 使用 libjvm.so 时出现 Sigsegv Java fatal error

java - 我应该在哪里声明和/或实现我的自定义 ResultCommand?

java - 执行器服务invokeAll

java - 用于编译和运行java文件的批处理文件?

递归协议(protocol)的 Swift 内存管理