java.lang.OutOfMemoryError : Compressed class space 错误

标签 java garbage-collection jvm out-of-memory java-8

我们在 java-8-oracle 上运行。

我们六个月前搬到了 java8。

在过去的几天里,我们不时收到 OOME,但我们无法识别或重现问题。

当我们执行对服务器 (tomcat) 的调用时,我们在堆栈跟踪中收到此错误:

java.lang.OutOfMemoryError: Compressed class space

重启服务器即可解决问题。对其他服务器的相同调用有效,对同一服务器的另一种类型的另一个调用也有效。

在查看 gc.log 时,我们看到:

2015-05-27T16:05:42.991+0000: 98774.440: [Full GC (Last ditch collection) 98774.440: [CMS: 575745K->575330K(3495936K), 0.8687777 secs] 575745K->575330K(4107008K), [Metaspace: 97940K->97940K(1396736K)], 0.8696093 secs] [Times: user=0.95 sys=0.00, real=0.88 secs]
2015-05-27T16:05:55.486+0000: 98786.935: [Full GC (Metadata GC Threshold) 98786.935: [CMS: 573414K->578735K(3495936K), 0.9372859 secs] 925046K->578735K(4107008K), [Metaspace: 99428K->99428K(1396736K)], 0.9386626 secs] [Times: user=1.01 sys=0.00, real=0.94 secs]

jstat -gc 返回:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
87296.0 87296.0  0.0   3151.4 523776.0 148284.4 3495936.0   574868.5  1395640.0 98066.3 1048576.0 11339.1  12165  636.851  223   116.957  

753.808

我在 jstat 日志或 gc 日志中都没有看到任何内存问题。

尝试运行 jmap -clstats 挂起:

Attaching to process ID 5110, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.25-b02
finding class loader instances ..

最佳答案

我们遇到了类似的问题。不幸的是,堆转储不会帮助您,因为这些类不在堆中而是在 native 内存中。在您的 JVM 设置中启用这些以解决加载类的问题:

-XX:+PrintGCDetails -XX:+TraceClassUnloading -XX:+TraceClassLoading

在我们的例子中,问题是 JAXBContext.newInstance 不是单例。

祝你好运, 阿尔伯特

关于java.lang.OutOfMemoryError : Compressed class space 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30511439/

相关文章:

.net - 在使用 .NET : always, 的响应式扩展时,永远不会或有时会保留对 `IDisposable` 的引用?

java - JVM CMS 垃圾收集问题

java - 如何修复 java.lang.UnsupportedClassVersionError : Unsupported major. 次要版本

java - 哪些 Java 语言机制允许对象引用变量类型与其引用的对象类型不同?

Java:如何实现通配符匹配?

来自打印机的 Java 图表

java - 核心 API 调用 System.gc()

java - 什么时候删除 Java 临时文件?

java - JNI 异常访问冲突

java - 即使应用程序终止,如何在后台使用下载管理器下载多个文件?