JVM 調優 首先,為什么要 JVM 調優呢? JVM 調優的目的就是為了讓應用程序使用最小的硬件消耗來承載更大的吞吐量 什么情況下需要 JVM 調優呢? 系統吞吐量下降,或系統延遲較高 出現
JVM 調優
首先,為什么要 JVM 調優呢?
JVM 調優的目的就是為了讓應用程序使用最小的硬件消耗來承載更大的吞吐量
什么情況下需要 JVM 調優呢?
- 系統吞吐量下降,或系統延遲較高
- 出現 OOM
- Full GC 頻繁
- GC 停頓時間過長(超過 1s,已經影響用戶體驗)
調優主要調什么?
JVM 調優主要是兩方面:內存分配
和垃圾回收
,大多數情況下是不需要進行 JVM 調優的,JVM 調優是不得已的手段,如果要對系統進行優化,則優先對系統架構和代碼進行優化!
- 合理的設置堆內存
- GC 高效回收占用內存的垃圾對象
JVM 調優步驟:
- 分析 GC 日志
- 判斷系統 GC 頻率、GC 耗時
- 調整參數
GC 日志分析
JVM 中常用參數設置:
-Xms 堆內存最小值
-Xmx 堆內存最大值
-Xmn 新生代內存的最大值
-Xss 每個線程的棧內存
首先通過設置 VM Options 來打開 GC 日志的打印,開啟 GC 日志參數設置如下:
# 開啟 GC 日志創建更詳細的 GC 日志
-XX:+PrintGCDetails
# 開啟 GC 時間提示
-XX:+PrintGCTimeStamps,-XX:+PrintGCDateStamps
# 打印堆的GC日志
-XX:+PrintHeapAtGC
# 指定GC日志路徑
-Xloggc:./logs/gc.log
Young GC 日志
2023-06-18T14:31:11.340+0800: 2.340: [GC (Allocation Failure) [PSYoungGen: 896512K->41519K(1045504K)]
896512K-41543K(3435008K), 0.0931965 secs] [Times: user=0.14 sys=0.02, real=0.10 secs]
# GC 日志參數解釋
2023-06-18T14:31:11.340+0800 # GC 開始的時間,+0800 代表中國所在的東區
2.340 # GC 事件開始時間相對于 JVM 開始啟動的間隔秒數
GC # 區分 Young GC 和 Full GC 的標志,GC 代表 Young GC
(Allocation Failure) # 觸發 GC 原因
PSYoungGen # 垃圾回收器的名稱
896512K->41519K # 垃圾收集前后新生代的內存使用量由 896512K 變為 41519K
(1045504K) # 新生代內存總大小
896512K-41543K # 垃圾收集前后,整個堆內存使用量由 896512K 變為 41543K
(3435008K) # 堆空間的總大小
0.0931965 secs # GC 持續時間
user=0.14 # GC 線程消耗 CPU 時間為 0.14
sys=0.02 # GC 過程中操作系統調用和系統等待事件所消耗的事件為 0.02
real=0.10 secs # 應用程序暫停的事件為 0.10
Full GC 日志
2021-05-19T14:46:07.367+0800: 1.562: [Full GC (Metadata GC Threshold)[PSYoungGen: 18640K-
>0K(1835008K)] [ParOldGen: 16K->18327K(1538048K)] 18656K->18327K(3373056K), [Metaspace: 20401K-
>20398K(1069056K)], 0.0624559 secs] [Times: user=0.19 sys=0.00, real=0.06 secs]
2021-05-19T14:46:07.367+0800 # GC 開始的時間,+0800 代表中國所在的東區
1.562 # GC 事件開始時間相對于 JVM 開始啟動的間隔秒數
Full GC # 區分 Young GC 和 Full GC 的標志
(Metadata GC Threshold) # 觸發 GC 原因
PSYoungGen # 垃圾回收器的名稱
18640K->0K(1835008K) # 垃圾收集前后新生代的內存使用量由 18640K 變為 0K,新生代內存總大小為 1835008K
ParOldGen # 老年代垃圾收集器名稱
16K->18327K(1538048K) # 垃圾收集前后老年代的內存使用量由 16K 變為 18327K,老年代內存總大小為 1538048K
18656K->18327K # 垃圾收集前后,整個堆內存使用量由 896512K 變為 41543K
(3373056K) # 堆總空間大小
Metaspace # 元空間區域垃圾收集器是 Metaspace
20401K->20398K(1069056K) # 垃圾收集前后元空間的內存使用量由 20401K 變為 20398K,元空間總大小為 1069056K
0.0624559 secs # GC 持續時間
user=0.19 # GC 線程消耗 CPU 時間為 0.19
sys=0.00 # GC 過程中操作系統調用和系統等待事件所消耗的事件為 0.00
real=0.06 secs # 應用程序暫停的事件為 0.06
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。