JVM參數
阿新 • • 發佈:2017-07-12
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參數