WnL28資訊網——每日最新資訊28at.com
JVM 調優是一個很大的話題,在回答“如何進行 JVM 調優?”之前,首先我們要回答一個更為關鍵的問題,那就是,我們為什么要進行 JVM 調優?WnL28資訊網——每日最新資訊28at.com
只有知道了為什么要進行 JVM 調優之后,你才能準確的回答出來如何進行 JVM 調優?WnL28資訊網——每日最新資訊28at.com
要進行 JVM 調優無非就是以下兩種情況:WnL28資訊網——每日最新資訊28at.com
- 目標驅動型的 JVM 調優,如,我們是為了最短的停頓時間所以要進行 JVM 調優,或者是我們為了最大吞吐量所以要進行 JVM 調優等。
- 問題驅動型的 JVM 調優,因為生產環境出現了頻繁的 FullGC 了,導致程序執行變慢,所以我們要進行 JVM 調優。
所以,針對不同的 JVM 調優的手段和側重點也是不同的。WnL28資訊網——每日最新資訊28at.com
總的來說,JVM 進行調優的流程如下:WnL28資訊網——每日最新資訊28at.com
- 確定 JVM 調優原因
- 分析 JVM(目前)運行情況
- 設置 JVM 調優參數
- 壓測觀測調優后的效果
- 應用調優后的配置
具體來說它們的執行如下。WnL28資訊網——每日最新資訊28at.com
1.確定JVM調優原因
先確定是目標驅動型的 JVM 調優,還是問題驅動型的 JVM 調優。WnL28資訊網——每日最新資訊28at.com
如果是目標性的 JVM 調優,那么 JVM 調優實現思路就比較簡單了,如:WnL28資訊網——每日最新資訊28at.com
- 以最短停頓時間為目標的調優,只需要將垃圾收集器設置成以最短停頓時間的為目標的垃圾收集器即可,如 CMS 收集器或 G1 收集器。
- 以吞吐量為目標的調優,只需要將垃圾收集器設置為 Parallel Scavenge 和 Parallel Old 這種以吞吐量為主要目標的垃圾回收器即可。
如果是以問題驅動的 JVM 調優,那就要先分析問題是什么,然后再進行下一步的調優了。WnL28資訊網——每日最新資訊28at.com
2.分析JVM運行情況
我們可以借助于目前主流的監控工具 Prometheus + Grafana 和 JDK 自帶的命令行工具,如 jps、jstat、jinfo、jstack 等進行 JVM 運行情況的分析。WnL28資訊網——每日最新資訊28at.com
主要分析的點是 Young GC 和 Full GC 的頻率,以及垃圾回收的執行時間。WnL28資訊網——每日最新資訊28at.com
3.設置JVM調優參數
常見的 JVM 調優參數有以下幾個:WnL28資訊網——每日最新資訊28at.com
- 調整堆內存大小:通過設置 -Xms(初始堆大?。┖?-Xmx(最大堆大?。﹨祦碚{整堆內存大小,避免頻繁的垃圾回收。
- 選擇合適的垃圾回收器:根據應用程序的性能需求和特點,選擇合適的垃圾回收器,如 Serial GC、Parallel GC、CMS GC、G1 GC 等。
- 調整新生代和老年代比:通過設置 -XX:NewRatio 參數來調整新生代和老年代的比例,優化內存分配。
- 設置合適的堆中的各個區域比例:通過設置 -XX:SurvivorRatio 參數和 -XX:MaxTenuringThreshold 參數來調整 Eden 區、Survivor 區和老年代的比例,避免過早晉升和過多頻繁的垃圾回收。
- 設置對象從年輕代進入老年代的年齡值:-XX:InitialTenuringThreshold=7 表示 7 次年輕代存活的對象就會進入老年代。
- 設置元空間大小:在 JDK 1.8 版本中,元空間的默認大小會根據操作系統有所不同。具體來說,在 Windows 上,元空間的默認大小為 21MB;而在 Linux 上,其默認大小為 24MB。然而如果元空間不足也有可能觸發 Full GC 從而導致程序執行變慢,因此我們可以通過 -XX:MaxMetaspaceSize=設置元空間的最大容量。
4.壓測觀測調優后的效果
JVM 參數調整之后,我們要通過壓力測試來觀察 JVM 參數調整前和調整后的差別,以確認調整后的效果。WnL28資訊網——每日最新資訊28at.com
5.應用調優后的配置
在確認了 JVM 參數調整后的效果滿足需求之后,就可以將 JVM 的參數配置應用與生產環境了。WnL28資訊網——每日最新資訊28at.com
本文鏈接:http://www.tebozhan.com/showinfo-26-89720-0.html京東面試:如何進行JVM調優?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 一篇帶你了解DDD四層微服務架構
下一篇: 悟透一個小竅門,你就能舉一反三掌握所有編程語言
標簽: