`
簡單從泚銷夨
  • 浏览: 73015 次
  • 性别: Icon_minigender_1
  • 来自: 文一西路969号
社区版块
存档分类
最新评论

记一次JVM GC优化

 
阅读更多

前端时间我们的服务器老收到报警短信,访问的时候又不慢(主要是7台服务器做了负载均衡,所以感觉不到问题),登录到服务器上看了下,GC出现了问题,

Java版本:

 

java version "1.6.0_32"
Java(TM) SE Runtime Environment (build 1.6.0_32-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.7-b02, mixed mode)

 

 

 

JVM参数:

 

-Xms16g -Xmx16g -Xmn2g -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=10 -XX:CMSInitiatingOccupancyFraction=80

 

 

 

见图



 一共有两个问题:

1)full gc提前了,我们设的是-XX:CMSInitiatingOccupancyFraction=80,当old区达到80%才进行一次cms gc,而现在25左右就开始了。

2)full gc时间过长,最近一次full gc花费了10几秒。

带着这两个问题进行排查:

用jstat查看最近一次full gc的原因,发现

 

导致频繁full gc的原来是System.gc(),在jvm参数里面添加-XX:+DisableExplicitGC,使用这个参数要防止NIO direct memory的OOM,可以观察服务器日志,当很长时间没有OOM,那就可以使用这个参数,不然可以用

-XX:+ExplicitGCInvokesConcurrent或 XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses,这两个参数也是用来改变System.gc()的默认行为用的;不同的是这两个参数只能配合CMS使用(-XX:+UseConcMarkSweepGC),而且System.gc()还是会触发GC的,只不过不是触发一个完全stop-the-world的full GC,而是一次并发GC周期。 CMS GC周期中也会做reference processing。 

 

添加-XX:+DisableExplicitGC后,结果正常,可full gc的时间还是很长,观察GC日志,发现:

 

[1 CMS-remark: 10069518K(12582912K)] 12794124K(16078208K), 3.2904140 secs] [Times: user=22.29 sys=0.44, real=3.29 secs] 

 CMS-remark时间过长,添加-XX:+CMSScavengeBeforeRemark,这个参数是在CMS在做remark之前做一次YGC,最后问题终于解决,full gc时间只要100多毫秒。

 

不受报警短信的骚扰了。

 

永久链接: http://alexchan.iteye.com/blog/1910168

  • 大小: 99.5 KB
  • 大小: 76.6 KB
分享到:
评论

相关推荐

    java 面试题 总结

    对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session ...

    Java面试宝典2010版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 4、请写...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    最新Java面试宝典pdf版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    Java面试笔试资料大全

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    Java面试宝典-经典

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    JAVA面试宝典2010

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    java面试题大全(2012版)

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    Java面试宝典2012版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4...

    Java面试宝典2012新版

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 84 4、...

    java面试宝典2012

    2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 90 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 91 4、...

    Java 面试宝典

    一. Java 基础部分..................................................................................................................... 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么...

    Java经典入门教程pdf完整版

    准版,JEE不仅巩固了标淮版屮的诈多优点,例如“编写一次、随处运行”的特性、方便存 取数据库的 JDBC API、 CORBA技术以及能够在 Internet应用中保护数据的安全模式等等, 同时还提供了对BJB( Enterprise java beans)...

    JAVA核心知识点整理(有效)

    MinorGC 的过程(复制->清空->互换) ....................................................................................... 24 1:eden、servicorFrom 复制到 ServicorTo,年龄+1.................................

Global site tag (gtag.js) - Google Analytics