JVM常用參數配置


本文主要了解下面內容:

1、JVM常用的配置參數如、內存配置參數、GC策略配置參數、日志配置參數、異常信息參數。

2、通過一些輔助指令可以幫助我們查找參數的指令,以及在運行期間查看和更改一些參數配置。

3、常用的一些應用啟動參數,在項目啟動的時候我們需要配置哪些參數。

4、各種部署場景下通過什么方式配置這些參數。

 

 

一、堆內存相關配置

設置堆初始值
指令1:-Xms2g
指令2:-XX:InitialHeapSize=2048m
​
​
設置堆區最大值
指令1:`-Xmx2g`
指令2: -XX:MaxHeapSize=2048m
​
​
縮小堆內存的時機
-XX:MaxHeapFreeRatio=70//堆內存使用率大於70時擴張堆內存,xms=xmx時該參數無效,默認值70
​
​
擴張堆內存的時機
-XX:MinHeapFreeRatio=40//堆內存使用率小於40時縮減堆內存,xms=xmx時該參數無效,默認值40
​
​
新生代內存配置
指令1:-Xmn512m
指令2:-XX:MaxNewSize=512m
​
​
2個survivor區和Eden區大小比率
指令:-XX:SurvivorRatio=6 //S區和Eden區占新生代比率為1:6,兩個S區2:6
​
​
新生代和老年代的占比
-XX:NewRatio=4 //表示新生代:老年代 = 1:4 即老年代占整個堆的4/5;默認值=2

 


二、方法區內存配置常用參數

初始化的Metaspace大小,
-XX:MetaspaceSize :
​
Metaspace最大值
-XX:MaxMetaspaceSize

 


三、線程棧內存配置常用參數

每個線程棧最大值

指令1:-Xss256k
指令2:-XX:ThreadStackSize=256k

注意:

棧設置太大,會導致線程創建減少。

棧設置小,會導致深入不夠,深度的遞歸會導致棧溢出。

建議棧深度設置在3000-5000

 

四、配置垃圾收集器

Serial垃圾收集器(新生代)
開啟:-XX:+UseSerialGC
關閉:-XX:-UseSerialGC
//新生代使用Serial 老年代則使用SerialOld
​
ParNew垃圾收集器(新生代)
開啟 -XX:+UseParNewGC
關閉 -XX:-UseParNewGC
//新生代使用功能ParNew 老年代則使用功能CMS
​
Parallel Scavenge收集器(新生代)
開啟 -XX:+UseParallelOldGC
關閉 -XX:-UseParallelOldGC
//新生代使用功能Parallel Scavenge 老年代將會使用Parallel Old收集器
​
ParallelOl垃圾收集器(老年代)
開啟 -XX:+UseParallelGC
關閉 -XX:-UseParallelGC
//新生代使用功能Parallel Scavenge 老年代將會使用Parallel Old收集器
​
CMS垃圾收集器(老年代)
開啟 -XX:+UseConcMarkSweepGC
關閉 -XX:-UseConcMarkSweepGC
​
G1垃圾收集器
開啟 -XX:+UseG1GC
關閉 -XX:-UseG1GC

 

 

五、GC策略配置

GC並行執行線程數
-XX:ParallelGCThreads=16


新生代可容納的最大對象
-XX:PretenureSizeThreshold=1000000 //大於此值的對象直接會分配到老年代,設置為0則沒有限制。
//避免在Eden區和Survivor區發生大量的內存復制,該參數只對Serial和ParNew收集器有效,Parallel Scavenge並不認識該參數


進入老年代的GC年齡
進入老年代最小的GC年齡
-XX:InitialTenuringThreshol=7 //年輕代對象轉換為老年代對象最小年齡值,默認值7,對象在堅持過一次Minor GC之后,年齡就加1,每個對象在堅持過一次Minor GC之后,年齡就增加1
​
​
進入老年代最大的GC年齡
-XX:MaxTenuringThreshold=15 //年輕代對象轉換為老年代對象最大年齡值,默認值15

 


六、GC日志信息配置

配置GC文件路徑
-Xloggc:/data/gclog/gc.log//固定路徑名稱生成
-Xloggc:/home/GCEASY/gc-%t.log //根據時間生成


滾動生成日志
日志文件達到一定大小后,生成另一個文件。須配置Xloggc

開啟 -XX:+UseGCLogFileRotation
關閉 -XX:-UseGCLogFileRotation
​
-XX:NumberOfGCLogFiles=4 //滾動GC日志文件數,默認0,不滾動
-XX:GCLogFileSize=100k //GC文件滾動大小,需配置UseGCLogFileRotation,設置為0表示僅通過jcmd命令觸發


打印詳細的GC日志
打印GC的詳細日志,並且在程序運行結束是會打印出JVM的內存占用情況

開啟 -XX:+PrintGCDetails
關閉 -XX:-PrintGCDetails


打印應用暫停時間
開啟 -XX:+PrintGCApplicationStoppedTime
關閉 -XX:-PrintGCApplicationStoppedTime


每次GC完成后,打印出JVM堆內存每個區域的使用情況
開啟 -XX:+PrintHeapAtGC
關閉 -XX:-PrintHeapAtGC


打印存活實例年齡信息
開啟 -XX:+PrintTenuringDistribution
關閉 -XX:-PrintTenuringDistribution

 

 

七、條件觸發配置

OutOfMemory異常時輸出文件
拋出內存溢出錯誤時導出堆信息到指定文件

開啟 -XX:+HeapDumpOnOutOfMemoryError
關閉 -XX:-HeapDumpOnOutOfMemoryError
//可以通過jinfo -flag [+|-]HeapDumpOnOutOfMemoryError <pid> 或 jinfo -flag HeapDumpOnOutOfMemoryError=<value> <pid> 來動態開啟或設置值
​
​
-XX:HeapDumpPath=/data/dump/jvm.dump//設置文件路徑
//當HeapDumpOnOutOfMemoryError開啟的時候,dump文件的保存路徑,默認為工作目錄下的


在Full GC時生成dump文件
-XX:+HeapDumpBeforeFullGC //實現在Full GC前dump
-XX:+HeapDumpAfterFullGC //實現在Full GC后dump。
-XX:HeapDumpPath=e:\dump //設置Dump保存的路徑


JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/dump/jvm.dump"

 

 

八、輔助指令


查看或修改正在運行的JVM 某項配置

指令格式:jinfo -flag 參數 進程號

1、查看HeapDumpOnOutOfMemoryError 配置是否開啟
jinfo -flag HeapDumpOnOutOfMemoryError 870778


2、修改HeapDumpOnOutOfMemoryError 配置(-關閉 +開啟)
jinfo -flag +HeapDumpOnOutOfMemoryError 870778


模糊查找指令
如果忘記了某個指令的全名,可根據部分單詞匹配查找

java -XX:+PrintFlagsInitial |grep GC


查看JVM所有參數

java -XX:+PrintFlagsInitial

 


九、常用啟動參數

# JVM啟動參數不換行
# 設置堆內存
‐Xmx4g ‐Xms4g

# 指定GC算法
‐XX:+UseG1GC ‐XX:MaxGCPauseMillis=50

# 指定GC並行線程數
‐XX:ParallelGCThreads=4

# 打印GC日志
‐XX:+PrintGCDetails ‐XX:+PrintGCDateStamps

# 指定GC日志文件
‐Xloggc:gc.log

# 指定Meta區的最大值
‐XX:MaxMetaspaceSize=2g

# 設置單個線程棧的大小
‐Xss1m

# 指定堆內存溢出時自動進行Dump
‐XX:+HeapDumpOnOutOfMemoryError
‐XX:HeapDumpPath=/usr/local/


此外,還有一些常用的屬性配置:

# 指定默認的連接超時時間
 ‐Dsun.net.client.defaultConnectTimeout=2000
‐Dsun.net.client.defaultReadTimeout=2000

# 指定時區
‐Duser.timezone=GMT+08

# 設置默認的文件編碼為UTF‐8
‐Dfile.encoding=UTF‐8

# 指定隨機數熵源(Entropy Source)
‐Djava.security.egd=file:/dev/./urandom

 


十、各種場景的參數設置方式

Idea

 

 

 

 

 

Tomcat

linux 在tomcat 的bin目錄下catalina.sh 文件里增加配置參數

JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m"

 

 

jar包

直接在啟動命令跟對應參數

nohup java -jar -XX:InitialHeapSize=30m jstx-server.jar

 

查看參數是否生效

jinfo -flag 參數 進程號

jinfo -flag HeapDumpOnOutOfMemoryError 1162

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM