1. 程式人生 > >JVM參數

JVM參數

mpi lac cgi 卸載 verbose java proc server maxperm

# java可執行文件位置
export JAVA_HOME=/data/jdk
# 設置項目代碼路徑
export CODE_HOME="/data/webserver/cgi-startup-package"
# 日誌路徑
export LOG_PATH="/data/webserver/logs/cgi.senyint.local"
mkdir -p $LOG_PATH
# 設置依賴路徑
export CLASSPATH="$CODE_HOME/classes:$CODE_HOME/lib/*"
# java可執行文件位置
export _EXECJAVA="$JAVA_HOME/bin/java"
# JVM啟動參數
# 打印參數
FLAG_OPTS
="-XX:+PrintCommandLineFlags" # 內存參數 MEMORY_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -XX:MaxDirectMemorySize=2048m -XX:PermSize=256m -XX:MaxPermSize=512m" # 性能參數 # -XX:+PerfDisableSharedMem: 解決: JVM statistics cause garbage collection pauses, 導致: jps, jstat不可用 PERFORMANCE_OPTS="-XX:-UseBiasedLocking -XX:-UseCounterDecay -XX:+AlwaysPreTouch -XX:AutoBoxCacheMax=20000 -XX:ReservedCodeCacheSize=240m
" # GC CMS參數 CMS_GC_OPTS="-XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled" # GC 日誌參數 GC_OPTS="-Xloggc:/dev/shm/cgi-gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails
" # 異常參數 ERROR_OPTS="-XX:-OmitStackTraceInFastThrow -XX:ErrorFile=${LOG_PATH}/hs_err_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_PATH}/" # JMX JMX_PORT="18888" JMX_OPTS="-Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1" export JAVA_OPTS="-server $FLAG_OPTS $MEMORY_OPTS $PERFORMANCE_OPTS $CMS_GC_OPTS $GC_OPTS $ERROR_OPTS $JMX_OPTS" # 啟動類 export MAIN_CLASS=com.senyint.cgi.startup.Bootstrap nohup $_EXECJAVA $JAVA_OPTS -classpath $CLASSPATH $MAIN_CLASS >/dev/null 2>&1 &

GC

-XX:+PrintGC   打印GC日誌
-XX:+PrintGCDetails   打印詳細的GC日誌
-Xloggc:/var/gc.log   將GC日誌打印在根目錄的var文件夾下的gc.log文件中
class

-verbose:class   打印類加載和卸載信息
堆內存

-Xmx2048m   最大堆內存
-Xms2048m   最小堆內存
-Xmn512m   新生代內存
-XX:SurvivorRatio   值為eden/from=eden/to
-XX:+HeapDumpOnOutOfMemoryError   在內存溢出時導出整個堆信息
-XX:HeapDumpPath=/var/heap.dump   指定導出堆的存放路徑
方法區

-XX:PermSize=50m  方法區大小
-XX:MaxPermSize=50m   方法區最大大小
Metaspace

-XX:MaxMetaspaceSize  指定元空間的大小,默認情況下,只受限於系統內存大小
棧

-Xss1m
直接內存

-XX:MaxDirectMemorySize   最大可用直接內存,默認最大值為-Xmx,直接內存使用量達到該值時,觸發垃圾回收
垃圾回收器

-XX:UseSerialGC   使用serial/serial old垃圾回收器
-XX:PrintGCApplicationStoppedTime:查看STW時間
-XX:UseParNewGC   使用parNew/serial old
-XX:ParallelGCThreads   parNew的GC線程數
Parallel

-XX:+UseParallelGC   使用Parallel Scavenge/serial Old
-XX:+UseParallelOldGC   使用Parallel Scavenge/Parallel Old
-XX:GCTimeRatio:直接設置吞吐量大小,假設設為19,則允許的最大GC時間占總時間的1/(1+19),默認值為99,即1/(1+99)
-XX:MaxGCPauseMillis:最大GC停頓時間,該參數並非越小越好
-XX:+UseAdaptiveSizePolicy:開啟該參數,-Xmn/-XX:SurvivorRatio/-XX:PretenureSizeThreshold這些參數就不起作用了,虛擬機會自動收集監控信息,動態調整這些參數以提供最合適的的停頓時間或者最大的吞吐量(GC自適應調節策略),而我們需要設置的就是-Xmx,-XX:+UseParallelOldGC或-XX:GCTimeRatio兩個參數就好(當然-Xms也指定上與-Xmx相同就好)
CMS

-XX:+UseConcMarkSweepGC   使用parNew/CMS
-XX:CMSInitiatingOccupancyFraction   指定當年老代空間滿了多少後進行垃圾回收。默認68,即68%
-XX:+UseCMSCompactAtFullCollection   (默認是開啟的)在CMS收集器頂不住要進行FullGC時開啟內存碎片整理過程,該過程需要STW
-XX:CMSFullGCsBeforeCompaction   指定多少次FullGC後才進行整理
-XX:ParallelCMSThreads   指定CMS回收線程的數量,默認為:(CPU數量+3)/4
-XX:+CMSPermGenSweepingEnabled與-XX:+CMSClassUnloadingEnabled   使用CMS進行方法區的回收
G1

-XX:+UseG1GC   使用G1
對象進入年老代

-XX:MaxTenuringThreshold=15   復制過15次後
-XX:PretenureSizeThreshold=1000   大於1000字節的對象直接進入年老代
JIT

-XX:CounterHalfLifeTime   半衰周期
-XX:CompileThreshold   默認server模式是10000,即在半衰周期內方法調用次數達到10000次,將該方法編譯為機器碼
-XX:-UseCounterDecay   關閉上述機制,即半衰周期的無窮大
-XX:OnStackReplacePercent   用於計算循環體執行的次數,server模式下通過該值算出來的回邊數是10700,即循環體執行10700次時便以為機器碼   

JVM參數