首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G1GC奇异行为

G1GC奇异行为
EN

Stack Overflow用户
提问于 2015-06-14 20:22:45
回答 2查看 594关注 0票数 3

为了安装G1GC开发人员,我决定在Eclipse RC3上尝试使用JavaEE,但我观察到了一种非常奇怪的行为:

如您所见,在应用程序的生命周期中,它已经运行了将近700个完整的GC,而只有30个小的GC。我还注意到,当应用程序处于加载状态时执行次要GCs -通常是在启动和加载大量内容时执行,而当应用程序处于空闲状态时则执行完整的GC。(这11个小时的大部分时间都是闲置的!)我希望当应用程序什么也不做的时候,就不需要GC了,或者至少它只是一个小GC。我还监控了eclipse的内存消耗--在空闲期间,它从未增加到超过130-140 MB,所以这也是为什么这些完整的GC看起来很奇怪的另一个原因。

下面是我的eclipse.ini jvm配置:

代码语言:javascript
复制
-server
-Xverify:none
-XX:+AggressiveOpts
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:+UseStringDeduplication
-XX:+UseCompressedOops
-XX:+UseCompressedClassPointers
-XX:MaxMetaspaceSize=256m
-Xloggc:/home/svetlin/software/eclipse/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps 
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=20m
-Xms1g
-Xmx1g

下面是GC日志:http://pastebin.com/sVBe4w1A

Java版本: OpenJDK 64位服务器VM (25.45-b02),用于LinuxAMD64JRE(1.8.0_45-内部-b14),于2015年5月17日由gcc 4.9.2的"buildd“构建19:21:01

您知道为什么G1GC会在根本不需要GC的情况下执行这些完整的GC吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-14 20:38:39

在日志中可以看到,您正在遭受System.gc()调用的困扰:

代码语言:javascript
复制
2015-06-14T14:56:23.682+0300: 12790,173: [Full GC (System.gc())  121M->118M(1024M), 0,4524898 secs]
   [Eden: 4096,0K(561,0M)->0,0B(561,0M) Survivors: 0,0B->0,0B Heap: 121,7M(1024,0M)->118,2M(1024,0M)], [Metaspace: 135216K->135216K(1177600K)]
 [Times: user=0,71 sys=0,00, real=0,45 secs]
2015-06-14T14:57:23.682+0300: 12850,174: [Full GC (System.gc())  121M->118M(1024M), 0,4732930 secs]
   [Eden: 3072,0K(561,0M)->0,0B(561,0M) Survivors: 0,0B->0,0B Heap: 121,2M(1024,0M)->118,2M(1024,0M)], [Metaspace: 135216K->135216K(1177600K)]
 [Times: user=0,73 sys=0,00, real=0,47 secs]
2015-06-14T14:58:28.684+0300: 12915,175: [Full GC (System.gc())  169M->118M(1024M), 0,4912699 secs]
   [Eden: 52,0M(561,0M)->0,0B(561,0M) Survivors: 0,0B->0,0B Heap: 169,9M(1024,0M)->118,8M(1024,0M)], [Metaspace: 135601K->135601K(1177600K)]
 [Times: user=0,74 sys=0,00, real=0,49 secs]

System.gc()电话似乎每分钟发生一次。你有没有运行任何奇怪的插件会导致这种情况?

否则,周期性的System.gc()调用通常是由于Java运行时调用它们造成的。在较早的Java版本中,我认为这是每分钟一次,但现在增加到每小时一次。无论如何,尝试设置这些属性以确保:

代码语言:javascript
复制
-Dsun.rmi.dgc.server.gcInterval=999999999
-Dsun.rmi.dgc.client.gcInterval=999999999

作为JVM选项。

票数 3
EN

Stack Overflow用户

发布于 2015-06-14 20:43:44

您所有的GCs都是由调用System.gc()引起的。您的GC日志显示了其中的698个。

因此,您的Eclipse发行版可能包含一个插件,它会导致这么多的System.gc()调用。如果不能修复这些调用,可以考虑使用VM选项-XX:+DisableExplicitGC来抑制显式GC。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30834129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档