2014-02-13 25 views
0

Datastax企業版Cassandra/Solr軟件包中出現長時間的GC暫停(> 10秒)。在監測了幾天之後,我發現它僅在CMS Perm Gen的GC發生如圖所示時發生。當PermGen GC發生時,長GC發生在圖表的每個拐點處。每當Perm Gen GC啓動時,都會導致客戶端會話超時!非堆CMS CMS上的DSE垃圾收集Perm Gen花了很長時間

https://www.dropbox.com/s/qgdcurprvc1sees/permgen_gc.png

堆GC是正常的,沒有任何停頓,而且一律得在非堆燙髮根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信息

  • 虛擬機:Java的熱點(TM)64位服務器VM版本20.12-b01
  • 銷售商:Sun Microsystems Inc.
  • JIT編譯器:Ho tSpot 64位分層編譯器

堆信息

  • 當前堆大小:10247153個字節
  • 最大堆大小:16218048個字節
  • 提交內存:16218048個字節
  • 待定定稿:{ 0} objects

VM Server Info

  • 操作系統:Linux 2.6.32-279.1.1.el6.x86_64
  • 架構:AMD64
  • 處理器的數量:32
  • 承諾虛擬存儲器:39845596個字節
  • 總物理存儲器:99018824個字節
  • 可用物理內存:58184572個字節
  • 總交換空間:4194296個字節
  • 自由交換空間:4194296個字節
+0

你能也驗證您的SYSTEM.LOG是JNA已安裝並正確加載? – dkblinux98

回答

0

使用-XX:+ CMSClassUnloadingEnabled,它允許CMS收集掃oldgen GC期間PermGen的和卸載不再使用的類。 鏈接:http://blog.redfin.com/devblog/2012/06/cmsclassunloadingenabled-at-redfin.html#.UwWeO4XqPK0

使用100或200 MB大小而不是60 MB的perm世代。

嘗試,並分享它是否解決您的問題

+0

它只是延遲了炸彈:( – Alladdin

+0

你使用的燙髮代碼的大小是多少?以前這個10秒的停頓是在5個小時內發生的(對嗎?)現在的頻率是多少?如果通過調整燙髮代碼推遲它的生產時間?是你的應用程序24-7型還是意味着每天重新啓動? – Deven

+0

MaxPermSize = 85Mb,但最大使用量僅爲57Mb 這是一個24x7服務,我們已經開始滾動重啓幾個 – Alladdin