在Java8中,我在我的服务上运行GC日志,通过GCeasy,我看到1GB被分配给metaspace,而峰值在40m左右,那么为什么要分配1GB呢?
我玩旗子,加上"-XX:MaxMetaspaceSize=10M“。
然后,我得到了java.lang.OutOfMemoryError: Metaspace,正如预期的那样,但是仍然在GC日志上看到分配了1GB。日志里有错误吗?或者我漏掉了什么。
我在GC日志文件上运行grep Metaspace并获得以下输出:
-XX:MaxMetaspaceSize=10485760 -XX:MetaspaceSize=10485760 CommandLine旗子:-XX:CompressedClassSpaceSize=2097152 -XX:+DisableExplicitGC -XX:GCLogFileSize=104857600 -XX:InitialHeapSize=536870912 -XX:MaxHeapSize=536870912 -XX:NumberOfGCLogFiles=10 -XX:+PrintGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:ReservedCodeCacheSize=134217728 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedClassPointers-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedClassPointers-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:+PrintGC-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCDateStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGC-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGC-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCDateStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:+UseCompressedOops-XX:+PrintGCTimeStamps-XX:+PrintGC-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCDateStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:+UseCompressedOops-XX:+PrintGCTimeStamps-XX:+PrintGC-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGC-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCDateStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+PrintGCTimeStamps-XX:ReservedCodeCacheSize=134217728-XX:+UseCompressedClassPointers-XX:+UseCompressedOops
2020年-05-19T16:38:18.359+0000: 0.837:[全GC (元数据GC阈值) PSYoungGen: 7298 K->0K(153088K) 7306K->6944K(502784K),Metaspace: 9975K->9975K(1058816K),0.0249384秒] Times: user=0.08 sys=0.01,real=0.02 secs
2020年-05-19T16:38:18.386+0000: 0.864:[全GC (元数据GC阈值) PSYoungGen: 0K->0K(153088K) 6944K->6944K(502784K),Metaspace: 9975K->9975K(1058816K),0.0129850秒]Time: user=0.04 sys=0.00,real=0.01 secs
2020-05-19T16:38:18.400+0000: 0.879:完全GC (最后一条沟收集) [PSYoungGen: 0K->0K(153088K)] [ParOldGen: 6944K->6816K(3496K)] 6944K->6816K(502784K),[Metaspace: 9975K->9965K(1058816K)],0.0252318秒
发布于 2020-05-20 16:24:52
答案基本上是here,尽管理解起来并不简单。
MaxMetaspaceSize限制提交的内存,而GC日志实际上打印保留的内存。所以保留:1058816K,提交:9975K,根据您的日志。保留内存根本不需要由交换或实际RAM支持,所以通常是非常大的。
这就是为什么你在GC log中看到这么大的数字。
https://stackoverflow.com/questions/61896564
复制相似问题