線上常用的虛擬機配置詳解


在JRockit的GC參數如下

-jrockit -Xms1636m -Xmx1636m -Xgc:parallel-Xjvmpi:allocs=off,monitors=off,entryexit=off

在Sun hotSpot下的GC參數如下

JAVA_OPTS="-server -Xms4g -Xmx4g -XX:PermSize=296m-XX:MaxPermSize=296m -Xmn1600m -XX:+UseConcMarkSweepGC-XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly-XX:CMSInitiatingOccupancyFraction=82 -XX:+PrintGCTimeStamps-XX:+DisableExplicitGC -XX:SurvivorRatio=10"


JAVA_OPTS="${JAVA_OPTS}-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/home/admin/logs/java.hprof"
JAVA_OPTS="${JAVA_OPTS} -XX:+UseCompressedOops"
JAVA_OPTS="$JAVA_OPTS -verbose:gc  -Xloggc:/home/admin/logs/gc.log-XX:+PrintGCDetails -XX:+PrintGCDateStamps"

 主要分析一下hotSpot虛擬機參數

參數詳解:

XX:+UseConcMarkSweepGC:使用並發收集器,適用於響應時間要求比較高的中,大規模應用。

XX:+UseCMSCompactAtFullCollection:是表是執行Full GC后對內存進行整理壓縮,免得產生內存碎片

XX:+CMSParallelRemarkEnabled:降低標記停頓

XX:+CMSPermGenSweepingEnabled:FULLGC觸發對PermGen區的回收 JDK1.6以后

XX:+CMSClassUnloadingEnabled:配置了CMSClassUnloadingEnabled,且Perm Gen的使用達到一定的比率 默認為92%.會觸發CMS    

XX:+UseCMSInitiatingOccupancyOnly:指示只有在 oldgeneration 在使用了初始化的比例后concurrentcollector 啟動收集

XX:CMSInitiatingOccupancyFraction=82:使用cms作為垃圾回收使用82%后開始CMS收集

XX:+PrintGCTimeStamps:打印GC信息

-XX:+DisableExplicitGC標志自動將System.gc()調用轉換成一個空操作

 -XX:SurvivorRatio=10:Eden區與Survivor區的大小比值。設置為10,則兩個Survivor區與一個Eden區的比值為2:10,一個Survivor區占整個年輕代的1/12

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof:當JVM發生OOM時,自動生成DUMP文件。示生成DUMP文件的路徑,也可以指定文件名稱

-XX:+UseCompressedOops:指針壓縮通常64位JVM消耗的內存會比32位的大1.5倍,這是因為對象指針在64位架構下,長度會翻倍(更寬的尋址)

-verbose:gc表示輸出虛擬機中GC的詳細情況和-XX:+PrintGCTimeStamps一起用

 以下參考

http://rednaxelafx.iteye.com/blog/906807

其中要注意的是

DisableExplicitGC

其中一種情況是下述三個條件同時滿足時會發生的: 

1、應用本身在GC堆內的對象行為良好,正常情況下很久都不發生full GC; 

2、應用大量使用了NIO的direct memory,經常、反復的申請DirectByteBuffer 

3、使用了-XX:+DisableExplicitGC 

此時有可能會拋出這個異常:java.lang.OutOfMemoryError: Direct buffer memory  。

所以

如果用了該參數而且遇到direct memory的OOM,可以嘗試去掉該參數看是否能避開這種OOM。如果擔心System.gc()調用造成full GC頻繁,可以嘗試下面提到 -XX:+ExplicitGCInvokesConcurrent 參數 



 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com