我在Datastax-enterprise的Cassandra / Solr软件包中经历了长时间的GC暂停(> 10秒)。经过几天的监测后,我发现它只发生在CMS Perm Gen的GC发生时,如图所示。当PermGen GC发生时,长GC发生在图表的每个拐点处。每当Perm Gen GC启动时,会有一个长时间停顿导致客户端会话超时!
https://www.dropbox.com/s/qgdcurprvc1sees/permgen_gc.png
堆GC是正常的并且没有暂停,只在非堆Perm Gen GC中长时间停顿,这总是在服务器处于非高峰时间时发生。
![在此处输入图片说明] [1]
DSE使用的JVM选项:
-ea -javaagent:/usr/local/dse/resources/cassandra/lib/jamm-0.2.5.jar
-XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42
-Xms16384M -Xmx16384M -Xmn5461M -XX:+HeapDumpOnOutOfMemoryError
-Xss180k -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1
-XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly
-Djava.net.preferIPv4Stack=true -Dcassandra.load_ring_state=false
-Dcassandra-foreground=yes -Dsearch-service=true
-Dtomcat.logs=/var/log/dse/tomcat -DName=SI2_DSE
-Ddse.solr.data.dir=/data/solrIndexRamDisk
-Djava.library.path=/usr/local/dse/resources/hadoop/native/Linux-amd64-64/lib
JVM信息
堆信息
VM服务器信息
答案 0 :(得分:1)
如果你可以直接使用Solr,你可以试试Heliosearch,它试图用堆外数据来解决GC暂停的问题。
答案 1 :(得分:0)
使用-XX:+ CMSClassUnloadingEnabled,它允许CMS收集器在oldgen GC期间扫描permgen并卸载不再使用的类。 链接:http://blog.redfin.com/devblog/2012/06/cmsclassunloadingenabled-at-redfin.html#.UwWeO4XqPK0
使用100或200 MB大小来生成烫发,而不是60 MB。
试一试并分享是否能解决您的问题