转载自 ---- http://www.blogjava.net/killme2008/archive/2009/09/26/296567.html
本以为在上篇定稿的参数后应该能有比较好的表现,然后实际的表现大出我的意料,cms回收触发非常频繁,虽然每次都只是10-50毫秒,但是次数12个
小时内能达到180多次,这显然不正常。通过gc日志和jstat可以看到,每次old区还在5%左右就开始进行CMS,此时的perm区也才30%,这
两个数字有浮动并且CMS触发的时间上也没有规律,在测试环境和生产环境中都是如此。
那么最后是怎么解决的呢?其实没有解决。我只是替换了一个参数就没再发生这个现象,上文提到为了避免System.gc()调用引起的full
gc,使用了jdk6引入的新参数-XX:+ExplicitGCInvokesConcurrent来让System.gc()并发执行,但是测试表明
恰恰是这个参数引起了CMS的频繁发生,去掉这个参数就没有那个奇特的现象。重复检查了代码,并且再次查看了GC日志,没有再发现有
System.gc()的调用,我暂时将原因归结于使用了ExplicitGCInvokesConcurrent参数后其他方法触发了CMS,如果有知
晓的朋友请留言告知,最后的方案还是彻底禁掉了显式GC调用。最终定稿的参数:
-
server
-
Xms1536m
-
Xmx1536m
-
XX:NewSize
=
256m
-
XX:MaxNewSize
=
256m
-
XX:PermSize
=
64m
-
XX:MaxPermSize
=
64m
-
XX:
+
UseConcMarkSweepGC
-
XX:
+
UseCMSCompactAtFullCollection
-
XX:CMSInitiatingOccupancyFraction
=
70
-
XX:
+
CMSParallelRemarkEnabled
-
XX:SoftRefLRUPolicyMSPerMB
=
0
-
XX:
+
CMSClassUnloadingEnabled
-
XX:
+
DisableExplicitGC
-
XX:SurvivorRatio
=
8
删除了+CMSPermGenSweepingEnabled,这个参数在jdk6上跟
-
XX:
+
CMSClassUnloadingEnabled
作用重叠了,如果你还跑在jdk5上面,那么应该使用这个参数。救助空间设置为NewSize的1/10,也就是25M左右,让年轻代尽量回收,防止年轻
对象跑到年老代过早触发CMS甚至full gc。CMS的触发阀值下降到70%,因为年老代增长较慢,宁愿回收次数多一点,降低长暂停的可能。
24小时内的某台生产机器的表现,通过jstat观察:
S0 S1 E O P YGC YGCT FGC FGCT GCT
39.70
0.00
5.59
15.15
28.99
20260
326.041
14
0.592
326.633
39.70
0.00
65.49
15.15
28.99
20260
326.041
14
0.592
326.633
0.00
36.93
19.37
15.16
29.01
20261
326.059
14
0.592
326.650
0.00
36.93
93.23
15.16
29.01
20261
326.059
14
0.592
326.650
34.04
0.00
59.62
15.17
29.01
20262
326.076
14
0.592
326.668
0.00
38.55
12.76
15.19
29.01
20263
326.094
14
0.592
326.686
0.00
38.55
65.48
15.19
29.01
20263
326.094
14
0.592
326.686
CMS两次暂停时间总和在100ms以下,minor gc平均一次执行花了16ms,平均3-4秒发生一次。暂时来看还不错,也许还可以适当调小一下NewSize,加快以下minor gc。
此次调整总共花了大概一周多的时间,由于经验不足,还是走了不少弯路,幸好最终的结果还可以,也让自己对cms
gc有比较深入的了解。我们的系统在周4晚上已经全部更新上线,从内部测试、压测、日常测试、beta测试以来,每个阶段都发现几个隐蔽的问题,在上线后
暂时没有再发现问题,证明这个流程还是很有意义的,我过去对流程充满偏见,现在看来是可笑的。总结我在淘宝5个月越来学习到的东西,几个关键词:认真、负
责、细心、快乐。
分享到:
相关推荐
GChisto及CMS GC相应补丁文件,补丁文件未亲测。 This patch adds the following features and improvements when using CMS GC in incremental mode: detecting Full GCs corrected parsing errors when using -XX:...
《工作手册式CMS建站项目实践》任务书任务4-搭建企业网站开发环境.pdf《工作手册式CMS建站项目实践》任务书任务4-搭建企业网站开发环境.pdf《工作手册式CMS建站项目实践》任务书任务4-搭建企业网站开发环境.pdf...
毕业综合实践报告实例网站CMS开发实践.doc
《工作手册式CMS建站项目实践》任务书任务2-设计企业网站前台版面.pdf《工作手册式CMS建站项目实践》任务书任务2-设计企业网站前台版面.pdf《工作手册式CMS建站项目实践》任务书任务2-设计企业网站前台版面.pdf...
【现象】悲催的是运行了几天后,突然有几台机器开始报警,上机器看到的现象是CMS GC的remark竟然花了20s+,而实际上这个时候old也就用了2g+,这个时
《工作手册式CMS建站项目实践》任务书任务12-维护企业网站.pdf《工作手册式CMS建站项目实践》任务书任务12-维护企业网站.pdf《工作手册式CMS建站项目实践》任务书任务12-维护企业网站.pdf《工作手册式CMS建站项目...
《工作手册式CMS建站项目实践》任务书任务11-验收企业网站.pdf《工作手册式CMS建站项目实践》任务书任务11-验收企业网站.pdf《工作手册式CMS建站项目实践》任务书任务11-验收企业网站.pdf《工作手册式CMS建站项目...
动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms动易cms
J2CMS是一款基于JAVAEE平台的开源内容管理系统.采用Spring2.5 + Struts2.1 + JPA1.0(Hibernate3.3)+FreeMarker + MySQL开发. J2CMS内容管理系统开发环境: eclipse-jee-juno-SR1-win32-x86_64 JDK 1.6 Apache tomcat...
用于分析 java gc日志文件。根据日志中的CMS GC统计信息可得到Full GC(也可以理解为Major GC)以及Minor GC相关数据
cms源码 cms源码 cms源码 cms源码 cms源码 cms源码 cms源码 cms源码
cms-J2CMS-SSH系统cms-J2CMS-SSH系统cms-J2CMS-SSH系统
51javacms是一款纯ajax的mvc架构cms;摒弃了传统的ssh的java企业级架构的庞大和臃肿;代码简洁,功能简单实用,安装一键式;站内搜索是使用lucene3.3的技术;真正的开源;真正的免费;非常适合互联网中小型网站的...
基于thinkphp的cms学生学籍管理系统 功能模块:1.管理员模块 管理学生和用户(班主任和年级主任) ...操作步骤: 1.首先将数据库相关操作完成 ...4.前台教师登录地址:http://localhost/cms2/index.php/home/index/index
1.首先将数据库相关操作完成 建立数据库连接 数据表的设计 ...4.前台教师登录地址:http://localhost/cms2/index.php/home/index/index 需要完善地方:用户添加学生添加信息的验证,注册信息的验证等
基于YII2框架的CMS, 预览地址http://demo.cms.feehi.com
很好的cms,手动托控件就可以生成页面(浏览器上托,非vs脱)
苹果cms在线采集70多个接口,用谷歌浏览器用谷歌浏览器
jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms
ASPCMS预览版Beta2