精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

記一次艱難的GC問題排查!

運(yùn)維 網(wǎng)絡(luò)運(yùn)維
最近在我的項(xiàng)目中就出現(xiàn)了一個比較奇葩的gc問題,排查過程比較繁瑣,所以在這里分享一下這個整個排查過程,希望對大家有一定的幫助。

[[399235]]

本文轉(zhuǎn)載自微信公眾號「咖啡拿鐵」,作者咖啡拿鐵。轉(zhuǎn)載本文請聯(lián)系咖啡拿鐵公眾號。

 背景

gc問題一直是一個很難排查的問題,但是他又是一個經(jīng)常在我們開發(fā)業(yè)務(wù)中出現(xiàn)的。這不,最近在我的項(xiàng)目中就出現(xiàn)了一個比較奇葩的gc問題,排查過程比較繁瑣,所以在這里分享一下這個整個排查過程,希望對大家有一定的幫助

排查過程

確定GC出問題

在某一天的上午突然出現(xiàn)了報警,發(fā)現(xiàn)是ZK斷開了鏈接,

從圖上看我們這個錯誤是間斷性的出現(xiàn),最開始以為是zk出現(xiàn)了問題,后來經(jīng)過排查其他服務(wù)的zk并沒有出現(xiàn)任何問題。所以就懷疑是內(nèi)部的代碼出現(xiàn)問題導(dǎo)致的,研究之后發(fā)現(xiàn)是zk出現(xiàn)了心跳超時情況才導(dǎo)致的斷開鏈接,所以就懷疑了兩種情況:

  • 網(wǎng)絡(luò)有抖動
  • 機(jī)器間歇性卡死

如果網(wǎng)絡(luò)有抖動的話的確是會出現(xiàn)偶發(fā)性超時,但是很明顯,其他所有的服務(wù)都沒問題,應(yīng)該不是抖動導(dǎo)致。所以機(jī)器應(yīng)該是間歇性的一個卡死,一般出現(xiàn)這個情況首當(dāng)其沖的就是我們CPU被打滿了,導(dǎo)致機(jī)器卡死,發(fā)現(xiàn)CPU并無問題,然后就是我們的gc帶來的STW,會導(dǎo)致我們的jvm進(jìn)程卡頓。

觀察之后的確是young gc很慢,導(dǎo)致我們的JVM發(fā)生了GC卡頓,所以出現(xiàn)了這個現(xiàn)象。

排查原因

GC出現(xiàn)問題一般來說兩大法寶可以解決大部分問題:

  • GC日志
  • dump文件

出現(xiàn)問題之后我立馬打開了GC日志,截圖如下:

可以發(fā)現(xiàn)我們的young gc已經(jīng)達(dá)到2.7s了,大家知道我們的young gc是全程STW的,那就意味著每次gc就會卡頓2.7s,那么zk超時斷開鏈接也就符合正常了。再看了下這個gc收集情況,每次也能完全收集。在日志中很明顯在root scanning的時間比較長,當(dāng)時對這個階段不太熟悉(后面會繼續(xù)講),所以一直也不明白為什么這樣,在網(wǎng)上各種搜索,也沒有結(jié)論。

這個時候我在why哥公眾號讀到了一篇文章:https://mp.weixin.qq.com/s/KDUccdLALWdjNBrFjVR74Q, 建議大家可以閱讀一下這篇文章,這個文章中主要談到了我們jvm的一個優(yōu)化,大家都知道我們進(jìn)入STW的時候是需要一個安全點(diǎn)才可以的,而詢問是否進(jìn)入到安全點(diǎn)是需要耗費(fèi)資源的,所以jvm在做jit優(yōu)化的時候會講counted loop 也就是計(jì)數(shù)循環(huán)優(yōu)化成整個循環(huán)結(jié)束之后再進(jìn)入安全點(diǎn),在小米的技術(shù)文章中也提到了相關(guān)的問題:《HBase實(shí)戰(zhàn):記一次Safepoint導(dǎo)致長時間STW的踩坑之旅》 。

看完這兩個文章之后,我突然想到了我們的代碼也是counted loop的形式,所以就懷疑有可能也是這個問題導(dǎo)致的,馬上進(jìn)行代碼優(yōu)化,將for(int i = 0; i< n; i++) 中的int 換成了long,就可以避免這種jit的優(yōu)化,馬上興沖沖的將其上線,結(jié)果過了一天之后依然存在這個問題,此時人都快崩潰,搞了半天原來不是這個問題導(dǎo)致的。

定位問題

對于G1之前只是看了些原理相關(guān)的,但是此時原理相關(guān)的東西好像在這里基本沒啥用,所以我決定系統(tǒng)性的學(xué)習(xí)一下,這里我選擇的是《jvm G1源碼分析和調(diào)優(yōu)》這本書,在讀到5.4節(jié)的時候:

發(fā)現(xiàn)有兩個之前沒有見過的參數(shù),一個是G1LogLevel,一個是UnlockExperimentalVMOptions,從解釋說明上來看配置了之后能獲取到更加詳細(xì)的YGC日志,于是加上了這個參數(shù)然后繼續(xù)觀察,日志格式太長,只截取了部分日志信息,有興趣的可以下來自己打印一下:

可以發(fā)現(xiàn)在SystemDictionary Roots階段是比較慢的,但是這個又是啥玩意呢?在書里面是沒有任何介紹的,于是又進(jìn)行大量谷歌,終于是找到了一篇你假笨寫的一篇文章:JVM源碼分析之自定義類加載器如何拉長YGC,強(qiáng)烈推薦大家讀完這篇文章。

好了最后我來盤一盤到底為什么會出現(xiàn)gc慢的問題呢?我們這個定時任務(wù)是一個定時查詢微信退款信息的,微信的退款信息需要解析XML,就有如下代碼:

而我們的罪魁禍?zhǔn)灼鋵?shí)就在這個new XStream這個方法中,我們的默認(rèn)構(gòu)造方法會調(diào)用下面的這個構(gòu)造方法:

需要注意的是我們每次創(chuàng)建一個XStream都會新創(chuàng)建一個ClassLoader,先解釋一下ClassLoader,這里直接引用你假笨的一段話:

這里著重要說的兩個概念是初始類加載器和定義類加載器。舉個栗子說吧,AClassLoader->BClassLoader->CClassLoader,表示AClassLoader在加載類的時候會委托BClassLoader類加載器來加載,BClassLoader加載類的時候會委托CClassLoader來加載,假如我們使用AClassLoader來加載X這個類,而X這個類最終是被CClassLoader來加載的,那么我們稱CClassLoader為X類的定義類加載器,而AClassLoader為X類的初始類加載器,JVM在加載某個類的時候?qū)ClassLoader和CClassLoader進(jìn)行記錄,記錄的數(shù)據(jù)結(jié)構(gòu)是一個叫做SystemDictionary的hashtable,其key是根據(jù)ClassLoader對象和類名算出來的hash值(其實(shí)是一個entry,可以根據(jù)這個hash值找到具體的index位置,然后構(gòu)建一個包含kalssName和classloader對象的entry放到map里),而value是真正的由定義類加載器加載的Klass對象,因?yàn)槌跏碱惣虞d器和定義類加載器是不同的classloader,因此算出來的hash值也是不同的,因此在SystemDictionary里會有多項(xiàng)值的value都是指向同一個Klass對象。

我們把這個放到我們的場景來看就是下面這個情況:

由于我們每次請求都會新創(chuàng)建一個Xstream對象,從而也會新創(chuàng)建一個ClassLoader,由于我們的ClassLoader的key是根據(jù)每個對象來算出來的hash值,如果每次都新創(chuàng)建,自然hash值不一樣,從而導(dǎo)致我們有很多ClassLoader指向XStream這個class。為什么SystemDictionary的大小會影響我們GC時間呢?

想象一下這么個情況,我們加載了一個類,然后構(gòu)建了一個對象(這個對象在eden里構(gòu)建)當(dāng)一個屬性設(shè)置到這個類(static變量)里,如果gc發(fā)生的時候,這個對象是不是要被找出來標(biāo)活才行,那么自然而然我們加載的類肯定是我們一項(xiàng)重要的gc root,這樣SystemDictionary就成為了gc過程中的被掃描對象了。

我們的class信息是被分配在哪里的呢?在java7的話是在永久代,在java8就來到了元數(shù)據(jù)空間也就是我們的堆上,所以我們的young gc的時候是不會回收我們的class信息的,那么我們怎么解決這個問題呢?

  • java7: 在G1垃圾收集器中,只有在進(jìn)行full GC的時候,永久代才會被回收,這一過程是stop-the-world的。當(dāng)不做Full GC的時候,G1運(yùn)行是最優(yōu)化的。只有當(dāng)永久代滿了或者應(yīng)用分配內(nèi)存的速度超過了G1回收垃圾的速度的時候,G1才會觸發(fā)Full GC。在CMS垃圾收集器中,我們可以使用-XX:+CMSClassUnloadingEnabled在CMS concurrent cycle中回收集永久代。在G1里面沒有對應(yīng)的設(shè)置。G1只有在stop-the-world的Full GC的時候,才會回收永久代。我們可以根據(jù)應(yīng)用的需要,設(shè)置PermSize和MaxPermSize參數(shù)來調(diào)優(yōu)永久代的大小。
  • java8:提供了四個參數(shù)-XX:MetaspaceSize,-XX:MaxMetaspaceSize,-XX:MinMetaspaceFreeRatio,-XX:MaxMetaspaceFreeRatio用來控制元空間的大小,當(dāng)超過比例或者大小的時候就會進(jìn)行收集。

但是我們這個問題不應(yīng)該通過垃圾收集去解決,而是應(yīng)該從根源上去解決,那就是不能使用默認(rèn)的XStream構(gòu)造函數(shù),而是需要使用固定ClassLoader的構(gòu)造函數(shù)。

經(jīng)過修改之后上線,經(jīng)過觀察,沒有出現(xiàn)慢GC的現(xiàn)象。

最后

經(jīng)過這次排查的經(jīng)驗(yàn)來看,遇到GC問題尤其是那種比較不常見的,真的是非常難搞,你可能需要對這個問題進(jìn)行系統(tǒng)的學(xué)習(xí),以及大量的查找資料才能找到原因,我在排查這個問題的時候掉了不少頭發(fā)。在這里記錄一下這個經(jīng)驗(yàn),希望對大家以后的一些排查能有幫助。

 

責(zé)任編輯:武曉燕 來源: 咖啡拿鐵
相關(guān)推薦

2023-04-06 07:53:56

Redis連接問題K8s

2021-03-29 12:35:04

Kubernetes環(huán)境TCP

2021-11-23 21:21:07

線上排查服務(wù)

2019-03-15 16:20:45

MySQL死鎖排查命令

2023-01-04 18:32:31

線上服務(wù)代碼

2022-02-08 17:17:27

內(nèi)存泄漏排查

2017-12-19 14:00:16

數(shù)據(jù)庫MySQL死鎖排查

2024-04-10 08:48:31

MySQLSQL語句

2021-04-13 08:54:28

dubbo線程池事故排查

2022-11-03 16:10:29

groovyfullGC

2022-11-16 08:00:00

雪花算法原理

2022-12-17 19:49:37

GCJVM故障

2024-03-11 08:51:08

JVMSWAP內(nèi)存

2009-03-20 10:58:47

2019-09-10 10:31:10

JVM排查解決

2020-11-16 07:19:17

線上函數(shù)性能

2023-10-11 22:24:00

DubboRedis服務(wù)器

2021-05-31 10:08:44

工具腳本主機(jī)

2011-01-27 09:19:14

Mono開發(fā)

2023-01-05 11:44:43

性能HTTPS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

欧美中日韩免费视频| 欧美久久精品午夜青青大伊人| 成人免费观看毛片| 91激情在线| 国产剧情一区在线| 97婷婷涩涩精品一区| 欧洲美一区二区三区亚洲| 狠狠久久综合| 精品久久久一区| 在线综合视频网站| 日韩在线无毛| 国产综合久久久久影院| 午夜精品久久久99热福利| 美国黄色特级片| 久久97精品| 欧美军同video69gay| 毛片在线视频播放| 日本美女在线中文版| 91视频一区二区三区| 91深夜福利视频| 伦av综合一区| 亚洲午夜一区| 精品国产一区av| 亚洲精品乱码久久久久久久| 国产精品一区二区三区www| 精品欧美一区二区三区| 在线观看成人免费| 国产精品麻豆一区二区三区| 99精品黄色片免费大全| 亚洲一区二区三区毛片| 黄色一区二区视频| 狂野欧美一区| 97人人爽人人喊人人模波多| 99精品久久久久| 日产精品一区二区| 亚洲人成伊人成综合网久久久| 在线观看欧美一区二区| www欧美在线观看| 在线视频一区二区三| 国产h视频在线播放| 中文字幕在线播放网址| 国产精品你懂的| 日本在线播放一区| 涩爱av在线播放一区二区| 成人黄色777网| 91麻豆蜜桃| 99国产精品欲| 久久精品av麻豆的观看方式| 国产精品偷伦一区二区 | 亚洲精品国产高清久久伦理二区| 亚洲欧洲日韩综合二区| 高清在线观看av| 久久久久久久久久久黄色 | 国产精品美女免费看| 中文字幕免费高清网站| 久久久综合网| 日韩69视频在线观看| 日韩视频在线观看一区| 美女黄网久久| 国产精品久久久久久久av大片| 久久久久久久久久成人| 日韩精品一区第一页| 国产精品高潮视频| 中文字幕在线观看1| 蜜臀a∨国产成人精品| 成人免费直播live| 精品国产无码一区二区三区| 国产成人精品www牛牛影视| αv一区二区三区| 人妻精品一区二区三区| 99re在线精品| 欧美日韩大片一区二区三区| 国产一二三在线观看| 中文字幕不卡三区| 超碰在线免费观看97| 欧美色图天堂| 狠狠躁夜夜躁人人爽天天天天97 | 视频91a欧美| 日韩一级大片在线观看| 在线播放第一页| 免费成人av| 久久免费资源| 日本高清无吗v一区| 亚洲一二三区av| a一区二区三区亚洲| 精品国偷自产国产一区| 国产男女猛烈无遮挡a片漫画 | 欧美mv日韩mv亚洲| 蜜桃精品成人影片| 婷婷综合伊人| 97国产真实伦对白精彩视频8| 看黄色一级大片| 国产精品一区二区黑丝 | 日本不卡二三区| 久久久精品久久久久| 日韩特黄一级片| 美女爽到高潮91| 国产一级特黄a大片99| av国产在线观看| 亚洲午夜一区二区| 午夜视频你懂的| 加勒比色综合久久久久久久久| 伊人久久精品视频| jizz国产免费| 韩国成人福利片在线播放| 国产精品久久久久av福利动漫| 成人午夜电影在线观看| 亚洲午夜av在线| 五月婷婷丁香色| 日韩av午夜| 欧美老女人性视频| 中日精品一色哟哟| 99热国产精品| 亚洲成年人专区| 在线日韩影院| 亚洲精品在线观| 午夜精品一区二区三级视频| 久久xxxx精品视频| 动漫一区二区在线| 国产区在线观看| 欧美在线观看你懂的| 性囗交免费视频观看| 影视亚洲一区二区三区| 国产精品久久久久久久久久东京 | 亚洲伦理网站| 亚洲美女精品成人在线视频| 日本学生初尝黑人巨免费视频| 久久99久久99| 亚欧精品在线| 欧美电影网站| 日韩av在线天堂网| 欧美日韩精品亚洲精品| 国产美女一区二区| 亚洲欧美日韩另类精品一区二区三区| 亚洲欧美一区二区三区| 亚洲第一中文字幕在线观看| 国产va在线播放| 国产一区二区三区在线观看精品 | 人妻少妇一区二区| 国产日韩欧美一区| 国产精品二区二区三区| 在线播放免费av| 欧美一级二级三级乱码| a在线视频播放观看免费观看| 久久9热精品视频| 五码日韩精品一区二区三区视频| 欧美va在线观看| 亚洲视频在线观看| 国产日韩在线免费观看| 国产亚洲一二三区| 国产a级片免费观看| 国产99久久| 国产999视频| 国产在线高清| 欧美日韩综合在线免费观看| www.4hu95.com四虎| 免费在线成人网| 一区二区三区在线观看www| 精品福利在线| 久久天天躁狠狠躁夜夜躁2014| 91在线公开视频| 亚洲男人的天堂在线观看| 久久精品国产露脸对白| 亚洲国产精品久久久久蝴蝶传媒| 97神马电影| 漫画在线观看av| 国产一区二区久久精品| 国产精品露脸视频| 亚洲欧美日韩在线不卡| 亚洲精品鲁一鲁一区二区三区| 亚洲国产一区二区精品专区| 国偷自产av一区二区三区小尤奈| 亚洲黄色免费看| 中文字幕欧美日韩| www.国产视频| 欧美日韩午夜激情| 91成人精品一区二区| 国内成人免费视频| 人人干视频在线| 精品久久影视| 91麻豆蜜桃| 最新日韩三级| 欧美国产亚洲视频| 黄色av网站在线| 91精品国产乱码| 日韩在线视频免费播放| 亚洲私人黄色宅男| 中国黄色a级片| 激情五月婷婷综合| 狠狠97人人婷婷五月| 91一区二区| 久久66热这里只有精品| 亚洲狼人在线| 日本欧美爱爱爱| а√中文在线8| 亚洲精品中文字幕女同| 国产熟女一区二区丰满| 在线免费观看成人短视频| 69av视频在线| 欧美国产一区二区| 日韩无码精品一区二区| 久久精品免费观看| 日日碰狠狠添天天爽超碰97| 亚洲成人免费| 色999日韩自偷自拍美女| 国产精品久久久久av蜜臀| 国产精品亚发布| 樱花草涩涩www在线播放| 日韩亚洲第一页| 韩国福利在线| 亚洲精品电影网| 国产美女免费视频| 亚洲精品成人在线| 魔女鞋交玉足榨精调教| 福利视频网站一区二区三区| 狠狠操精品视频| 亚洲高清在线| 国产美女视频免费| 国产一区99| 国产精品久久久久久久久久久久午夜片 | 国产又黄又爽又色| 亚洲视频一二区| 影音先锋男人在线| 91香蕉视频污在线| 在线观看网站黄| 秋霞成人午夜伦在线观看| 黄色免费视频大全| 欧美日本久久| 亚洲一区在线直播| 色狠狠久久av综合| 国产精品yjizz| 免费精品一区| 国产精品一区二区三区毛片淫片 | 欧美日韩亚洲高清| 91视频免费在线看| 中文字幕在线观看不卡视频| 国产真人真事毛片视频| 91丨porny丨蝌蚪视频| aaaaa黄色片| 黑人巨大精品欧美黑白配亚洲| 香港日本韩国三级网站| 午夜亚洲影视| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 男女av免费观看| 91久久视频| 日韩精品一区在线视频| 亚洲福利专区| 又大又硬又爽免费视频| 欧美日韩hd| 女人被男人躁得好爽免费视频| 影音先锋成人在线电影| 国产麻豆电影在线观看| 无需播放器亚洲| 9l视频自拍9l视频自拍| 久久久久国产| 中文字幕精品在线播放| 综合久久亚洲| 无码毛片aaa在线| 亚洲经典在线| 欧美 国产 综合| 先锋亚洲精品| 亚洲精品一二三四五区| 蜜桃精品在线观看| 天天影视综合色| 蜜桃av一区二区三区| 色噜噜狠狠一区二区三区狼国成人 | 久热在线中文字幕色999舞| 秋霞午夜在线观看| 中文字幕国产亚洲2019| 成人日韩欧美| 欧美成人亚洲成人| 免费污视频在线| 日韩av成人在线| 日韩漫画puputoon| 国产日韩中文在线| jizz性欧美23| 蜜桃av噜噜一区二区三区| 亚洲人挤奶视频| 欧美精品一区三区在线观看| 欧美独立站高清久久| 蜜桃视频成人在线观看| 欧美 日韩 国产 一区| 欧美三级一级片| 日本 国产 欧美色综合| 天堂在线中文在线| 91在线观看下载| 久久国产柳州莫菁门| 亚洲欧洲另类国产综合| 天堂网一区二区三区| 在线免费视频一区二区| 国产精品九九九九| 亚洲国产精品免费| 青青青草原在线| 日韩中文字在线| 黄在线观看免费网站ktv| 国产成人精品在线观看| 亚洲国产天堂| 国产专区一区二区三区| 97久久夜色精品国产| 国产一区二区三区小说| 日本伊人精品一区二区三区观看方式| 国产性猛交96| 国产亚洲一区字幕| 九九视频免费看| 欧美色图在线观看| 狠狠人妻久久久久久综合麻豆| 亚洲精品一二区| 丁香影院在线| 国产精品av在线播放| 老司机亚洲精品一区二区| 久久国产精品99久久久久久丝袜| 欧美99在线视频观看| 免费在线观看毛片网站| 国产精品99久久久久久久vr| 日韩欧美视频免费观看| 午夜精品在线看| 91亚洲精品国偷拍自产在线观看| 亚洲性69xxxbbb| 手机av免费在线| 国产精品久久久久久一区二区| 欧美精品中文字幕亚洲专区| 欧美三级午夜理伦三级老人| 久久午夜影视| 国产人妻人伦精品1国产丝袜| 自拍视频在线观看一区二区| 久久久久在线视频| 日韩成人免费视频| 人人澡人人添人人爽一区二区| 国产精品一区二区女厕厕| 精品无人区麻豆乱码久久久| 欧美深夜福利视频| 高清在线观看日韩| 欧美色图一区二区| 欧美丰满少妇xxxbbb| 国产三级在线观看| 国产精品av在线播放| 日本成人中文| 少妇无码av无码专区在线观看| 国产91露脸合集magnet| 91在线播放观看| 欧美群妇大交群的观看方式| 国产无套粉嫩白浆在线2022年 | 成人性生交大免费看| 亚洲成av人影院| 亚洲国产www| 欧美不卡视频一区发布| 香蕉大人久久国产成人av| 中文字幕中文字幕在线中一区高清| 日韩有码一区二区三区| 国产一二三四视频| 欧美性三三影院| 日本一卡二卡四卡精品| 国产成人精品一区二区在线| 亚洲图片久久| 亚洲黄色小视频在线观看| 国产清纯白嫩初高生在线观看91| 亚洲伊人成人网| 一级做a爰片久久毛片美女图片| 日本不卡网站| 久久国产精品亚洲va麻豆| 久久精品系列| 国产jk精品白丝av在线观看| 一本一本大道香蕉久在线精品| 亚洲成人第一区| 高清一区二区三区日本久| 88久久精品| 久久久久久久久久久久久国产精品| 99精品久久只有精品| 男人午夜免费视频| 综合136福利视频在线| 成人黄色91| 永久免费看av| 久久先锋影音av鲁色资源网| 日本高清不卡码| 久久影院资源网| youjizz亚洲| 欧美黄色免费影院| 中文一区二区在线观看| 91亚洲视频在线观看| 久久精品91久久香蕉加勒比 | 日韩视频免费观看高清完整版| av在线免费播放| 国产三级精品在线不卡| 热久久免费视频| 色哟哟一一国产精品| 欧美一区二区播放| 国产极品人妖在线观看| 九色91国产| 韩国av一区二区| 日韩精品成人一区| 一区二区三区亚洲| 9999久久久久| 欧美日韩激情视频在线观看| 成人欧美一区二区三区1314| 刘亦菲久久免费一区二区| 日本在线观看天堂男亚洲| 欧美另类女人| 91精彩刺激对白露脸偷拍| 555www色欧美视频| 亚洲色图官网|