1. 程式人生 > >2.JVM的參數配置

2.JVM的參數配置

機器 sep use version out img ring com filesize

一、JVM參數類型

在生產環境中,一般情況下配置的參數有3種類型的:

  1. -X:非標準參數,不是每個虛擬機都實現了,例如-Xms2g
  2. -XX:非穩定性參數,例如-XX:NewSize=2g
    使用方式有下面3種:
    -XX:+<option> 開啟option參數
    -XX:-<option> 關閉option參數
    -XX:-<option>=<value> 將option參數的值設置為value
  3. -D:用於自定義參數,設置的值可以通過System.getProperty(String name)方法獲取,例如:-Dlog.dir=/data/log

通過java -h命令,可以查看所有標準參數,常見的有-D、-version、-classpath
技術分享圖片


通過java -X命令,可以查看所有-X參數,常見的有-Xms、-Xmx、-Xss
技術分享圖片

二、內存管理參數

1、堆棧大小設置

參數默認值使用介紹示例
-Xms 堆內存的1/64 堆的最小值 -Xms6g
-Xmx 堆內存的1/4 堆的最大值 -Xmx6g
-Xss 棧的大小 -Xss1m
-XX:NewSize 堆中新生代的初始值 -XX:NewSize=2g
-XX:MaxNewSize 堆中新生代的最大值 -XX:MaxNewSize=4g
-XX:PermSize 方法區的初始值 -XX:PermSize=256g
-XX:MaxPermNewSize 方法區的最大值 -XX:MaxPermSize=512g
-XX:NewRatio 2 新生代和老年代的比值 -XX:NewRatio=4
(表示新生代:老年代=1:4,
即新生代占堆的1/5)
-XX:SurvivorRatio 8 新生代中surviivor區和eden區的比值 -XX:SurvivorRatio=8
(表示survivor:eden=1:8,
即一個survivor占新生代的1/10)
-XX:+HeapDumpOnOutOfMemoryError 默認關閉 發生OOM時自動dump堆轉儲文件
-XX:HeapDumpPath dump文件路徑 -XX:HeapDumpPath=/data/log/heapdump.bin

2、垃圾回收設置

參數默認值使用介紹示例
-XX:+UseSerialGC Client模式的虛擬機默認開啟 Client模式下,使用Serial+Serial Old的收集器組合進行垃圾回收
-XX:+UseParNewGC 默認關閉 使用ParNew+Serial Old的收集器組合進行垃圾回收
-XX:+UseParallelGC server模式的虛擬機默認開啟 使用Parallel Scavenge+Serial Old的收集器組合進行垃圾回收
-XX:+UseParallelOldGC 默認關閉 使用Parallel Scavenge+Parallel Old的收集器組合進行垃圾回收
-XX:+UseConcMarkSweepGC 默認關閉 使用ParNew+CMS+Serial Old的收集器組合進行垃圾回收。如果CMS收集器出現Concurrent Mode Failure,則Serial Old收集器將作為後備收集器 -XX:+UseConcMarkSweepGC
-XX:ParallelCMSThreads 小於等於8個CPU時默認值為CPU的個數,多於8個時比CPU的數量少 設置GC時進行內存回收的線程數 -XX:ParallelCMSThreads=2
-XX:+PrintGCDetails 默認關閉 發生垃圾回收時打印內存回收日誌
-XX:+PrintGCTimeStamps 默認關閉 發生垃圾回收時打印回收時間
-Xloggc 設置GC記錄的文件 Xloggc:/data/log/tomcat/gc.log
-XX:+UseGCLogFileRotation 默認關閉 啟用GC日誌文件的自動轉儲
-XX:GCLogFileSize 默認關閉 控制GC日誌文件的大小 -XX:GCLogFileSize=1M

3、多線程相關參數

參數默認值使用介紹示例
-XX:+UsedBiasedLocking 默認開啟 是否使用偏向鎖
最後,給大家提供一個8核8G的機器常用的配置:
-Xms6g
-Xmx6g
-Xss1m
-XX:NewSize=2g
-XX:MaxNewSize=4g
-XX:NewRatio=4g
-XX:SurvivorRatio=8 
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:+UseConcMarkSweepGC 
-XX:ParallelCMSThreads=2 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-Xloggc:/data/log/gc.log 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/data/log/heapdump.bin 
-XX:+CMSParallelRemarkEnabled 
-XX:+ScavengeBeforeFullGC 
-XX:CMSInitiatingOccupancyFraction=75

2.JVM的參數配置