成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

jvm系列(六):Java服務GC參數調優案例

開發 開發工具 后端
總結來說,由于服務中大量使用了Cache,所以堆大小開到了22G。GC算法使用CMS(UseConcMarkSweepGC),開啟了降低標記停頓(CMSParallelRemarkEnabled),設置年輕代為并行收集(UseParNewGC),年輕代和老年代的比例為1:2 (NewRatio=2).

[[206256]]

本文介紹了一次生產環境的JVM GC相關參數的調優過程,通過參數的調整避免了GC卡頓對JAVA服務成功率的影響。

這段時間在整理jvm系列的文章,無意中發現本文,作者思路清晰通過步步分析最終解決問題。我個人特別喜歡這種實戰類的內容,經原作者的授權同意,將文章分享于此。備注部分為本人添加,主要起到說明的作用。

原文出處:https://segmentfault.com/a/1190000005174819

背景以及遇到的問題

我們的Java HTTP服務屬于OLTP類型,對成功率和響應時間的要求比較高,在生產環境中出現偶現的成功率突然下降然后又自動恢復的情況,如圖所示:

JVM和GC相關的參數如下:

  1. -Xmx22528m  
  2. -Xms22528m  
  3. -XX:NewRatio=2  
  4. -XX:+UseConcMarkSweepGC  
  5. -XX:+UseParNewGC  
  6. -XX:+CMSParallelRemarkEnabled 

總結來說,由于服務中大量使用了Cache,所以堆大小開到了22G。GC算法使用CMS(UseConcMarkSweepGC),開啟了降低標記停頓(CMSParallelRemarkEnabled),設置年輕代為并行收集(UseParNewGC),年輕代和老年代的比例為1:2 (NewRatio=2).

JVM GC日志相關的參數如下:

  1. -Xloggc:/data/gc.log  
  2. -XX:GCLogFileSize=10M  
  3. -XX:NumberOfGCLogFiles=10  
  4. -XX:+UseGCLogFileRotation  
  5. -XX:+PrintGCDateStamps  
  6. -XX:+PrintGCTimeStamps  
  7. -XX:+PrintGCDetails  
  8. -XX:+DisableExplicitGC  
  9. -verbose:gc 

問題解決過程

排除應用程序的內存使用問題

首先使用jmap查看內存使用情況:

  1. jmap -histo:live PID 

這個命令把程序中當前的對象按照個數和占用的空間排序以后打印出來。這里沒有發現使用異常的對象。

排除Cache內容過多的問題

如果Cache內容過多也會導致JVM老年代容易被用滿導致頻繁GC,因此調出GC日志進行查看,發現每次GC以后內存使用一般是從20G降低到5G左右,因此常駐內存的Cache不是導致GC長時間卡頓的根本原因。對于GC LOG的查看有多種方式,使用VisualVM比較直觀,需要使用VisualGC:

從圖中我們可以看到伊甸園和老年代的空間分配,由于整體內存是20G,設置 -XX:NewRatio=2 因此老年代是14G,伊甸園+S0+S1=7G

調整GC時間點(成功率抖動問題加重)

如果GC需要處理的內存量比較大,執行的時間也就比較長,STW (Stop the World)時間也就更長。按照這個思路調整CMS啟動的時間點,希望提早GC,也就是讓GC變得更加頻繁但是期望每次執行的時間較少。添加了下面這兩個參數:

  1. -XX:+UseCMSInitiatingOccupancyOnly  
  2. -XX:CMSInitiatingOccupancyFraction=50 

意思是說在Old區使用了50%的時候觸發GC。實驗后發現GC的頻率有所增加,但是每次GC造成的陳功率降低現象并沒有減弱,因此棄用這兩個參數。

調整對象在年輕代內存中駐留的時間(效果不明顯)

如果能夠降低老年代GC的頻率也可以達到降低GC影響的目的,因此嘗試讓對象在年輕代內存中進行更長時間的駐留,提升這些對象在年輕代GC時候被銷毀的概率。使用參數 -XX:MaxTenuringThreshold=31調整以后收效不明顯。

備注:

1、MaxTenuringThreshold 在1.5.005之前***值可以設置為31 ,1.5.006以后***值可以設置為15,超過15會被認為***大。

2、提升年輕代GC被銷毀的概率,只是調整這個參數效果不大,第二次age的值會重新計算。

CMS-Remark之前強制進行年輕代的GC

首先補充一下CMS的相關知識,在CMS整個過程中有兩個步驟是STW的,如圖紅色部分:

CMS并非沒有暫停,而是用兩次短暫停來替代串行標記整理算法的長暫停,它的收集周期是這樣:

1、初始標記(CMS-initial-mark),從root對象開始標記存活的對象

2、并發標記(CMS-concurrent-mark)

3、重新標記(CMS-remark),暫停所有應用程序線程,重新標記并發標記階段遺漏的對象(在并發標記階段結束后對象狀態的更新導致)

4、并發清除(CMS-concurrent-sweep)

5、并發重設狀態等待下次CMS的觸發(CMS-concurrent-reset)。

通過GC日志和成功率下降的時間點進行比對發現并不是每一次老年代GC都會導致成功率的下降,但是從中發現了一個規律:

前兩次GC CMS-Remark過程在4s左右造成了成功率的下降,但是第三次GC并沒有對成功率造成明顯的影響,CMS-Remark只有0.18s。Java HTTP 服務是通過Nginx進行反向代理的,nginx設置的超時時間是3s,所以如果GC卡頓在3s以內就不會對成功率造成太大的影響。

從GC日志中又發現一個信息:

在文檔和相關資料中沒有找到藍色部分的含義,猜測是remark處理的內存量,處理的越多就越慢。添加下面兩個參數強制在remark階段和FULL GC階段之前先在進行一次年輕代的GC,這樣需要進行處理的內存量就

  1. XX:+ScavengeBeforeFullGC   
  2. -XX:+CMSScavengeBeforeRemark 

備注:

1、藍色部分的含義:remark標記需要清理對象的容量。

2、FULL GC階段之前先在進行一次年輕代的GC的意義是:Yong區對象引用了Old區的對象,如果在Old區進行清理之前不進行Yong區清理,就會導致Old區被Yong區引用的對象無法釋放。

調優以后效果很明顯,下面是兩臺配置完全相同的服務器在同一時間段的成功率和響應時間監控圖,***個沒有添加強制年輕代GC的參數。

結論

1、在CMS-remark階段需要對堆中所有的內存對象進行處理,如果在這個階段之前強制執行一次年輕代的GC會大量減少remark需要處理的內存數量,進而降低JVM卡頓對成功率的影響。

2、對于Java HTTP服務,JVM的卡頓時間應該小于HTTP客戶端的調用超時時間,否則JVM卡頓會對成功率造成影響。

【本文為51CTO專欄作者“純潔的微笑”的原創稿件,轉載請通過微信公眾號聯系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2021-03-17 11:35:11

JVM代碼Java

2017-10-17 14:02:30

jvm調優工具

2017-09-22 15:15:23

jvm調優命令

2010-03-04 10:56:52

JVM參數

2010-09-25 13:05:07

JVM參數

2023-11-10 11:23:20

JVM內存

2012-01-10 14:35:08

JavaJVM

2023-12-12 08:00:39

2010-09-17 17:02:24

JVM參數

2017-07-21 08:55:13

TomcatJVM容器

2023-11-11 19:07:23

JVMJava

2017-09-26 16:32:03

JavaGC分析

2023-01-16 08:19:25

線上JVM調優

2021-09-06 11:02:17

JVM架構調優

2023-10-13 12:28:38

2010-09-26 13:39:46

JVM調優

2010-09-26 09:08:17

JVM調優

2012-01-10 15:13:56

JavaJVM

2017-11-08 15:23:57

Java GC優化jvm

2021-06-03 08:32:18

JVM調優虛擬機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品国产精品国产专区不卡 | 欧洲精品一区 | 91久久久久久久久久久 | 一区二区在线 | 亚洲国产成人久久综合一区,久久久国产99 | 国产区在线观看 | 亚洲精品一区二区在线观看 | 精品国产一区二区国模嫣然 | 成人h视频在线 | 国产精品欧美一区二区三区不卡 | 美国一级片在线观看 | 国产精品亚洲二区 | 在线国产一区 | 久久91精品国产一区二区 | 欧洲成人午夜免费大片 | 日韩中文在线 | 成人国内精品久久久久一区 | 国内久久 | 亚洲视频三 | 成人午夜精品一区二区三区 | 色姑娘综合网 | 日本又色又爽又黄的大片 | 亚洲精品一区二区三区在线 | 天天操天天射天天舔 | 日韩一二区 | 日本淫视频 | 日本免费一区二区三区 | 久久精品福利视频 | 亚洲成人av一区二区 | 国产精品视频久久久久久 | av男人的天堂在线 | 欧美色999 | 中文字幕一区二区三区精彩视频 | wwww.8888久久爱站网 | 伊人手机在线视频 | 国产精品综合视频 | 99自拍视频 | 久久国产精品视频 | 99视频在线免费观看 | 精品国产不卡一区二区三区 | 中文字幕三区 |