国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 一次詭異的full gc查找問題全過程

一次詭異的full gc查找問題全過程

2021-06-10 15:14半畝方田 Java教程

這篇文章主要給大家分享介紹了一次詭異的full gc查找問題全部過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

背景

一個服務(wù)突然所有機(jī)器開始頻繁full gc。而服務(wù)本身沒有任何改動和發(fā)布記錄。上線查看gc log日志,日志如下:

一次詭異的full gc查找問題全過程

從日志來看,每次發(fā)生full gc的時候都比較奇怪,主要有兩點,第一、old區(qū)域和perm的區(qū)域使用率很低,沒有到達(dá)觸發(fā)full gc的條件,第二、項目中配置的是cms,為什么沒有進(jìn)行 cms gc,直接進(jìn)行了full gc呢。

查找過程

第一、代碼會不會是調(diào)用了system.gc()

考慮在使用direct memory的時候,先判斷direct memory是否足夠,要是不足的話會使用system.gc()嘗試釋放內(nèi)存。于是直接使用反射去監(jiān)控direct memory。發(fā)現(xiàn)direct memory的使用率始終在10%左右,不可能去調(diào)用system.gc()。

而且此時去查看jvm參數(shù)已經(jīng)禁止顯示調(diào)用了system.gc()了。

一次詭異的full gc查找問題全過程

第二、使用 jstat -gccause查看gc原因

想著要是能找到gc的原因就好了。于是使用 jstat -gccause實時監(jiān)控gc原因,但是發(fā)現(xiàn)始終是allocation failure。但是在監(jiān)控中發(fā)現(xiàn)old區(qū)域中有突然增加800m,通過我司的監(jiān)控平臺也發(fā)現(xiàn)了old區(qū)域暴漲的現(xiàn)象。監(jiān)控如下:

一次詭異的full gc查找問題全過程

一次詭異的full gc查找問題全過程

并且通過jmap -histo pid查看old gen 突變前后內(nèi)存增加值,發(fā)現(xiàn)增加的800m全部是byte[],并且dump內(nèi)存下來使用mat查看內(nèi)存,然后并沒有什么收獲。

第三、找到有問題開始時候的改動點

因為項目在發(fā)生問題的時候并沒有改動和上線,基本上就排除代碼本身的原因。聯(lián)系運(yùn)維告知那個時間點,我們所在的服務(wù)節(jié)點上部署了log_agent。

log_agent的作用就是把本地日志上報到日志中心存儲起來,其架構(gòu)示意圖demo如下:

一次詭異的full gc查找問題全過程

猜著肯定是和log_agent通信的時候有bug導(dǎo)致的,于是讓運(yùn)維幫忙把其中一臺機(jī)器上的log_agent給刪除了,刪除之后full gc恢復(fù)正常。

到此基本上確定了是日志上報導(dǎo)致的問題。

第四、定位日志上報的jar具體有問題的代碼

定位到是日志上報的jar導(dǎo)致的問題之后,就把這個問題反饋給了相關(guān)負(fù)責(zé)人。但是他們追蹤了很久之后并沒有發(fā)現(xiàn)什么問題。

之后有時間之后,我就把他們相關(guān)代碼看了一下,發(fā)現(xiàn)其中有段代碼有點問題。有問題代碼如下:

一次詭異的full gc查找問題全過程

在出入log的的時候在append中會調(diào)用sendlogentry這個方法,而logentries本身是個list對象,非線程安全的。這樣的話,在多個線程中同時輸出日志就有安全問題。于是就在sendlogentry這個方法上加上線程安全(synchronized),上線問題解決,沒有發(fā)生頻繁full gc了。

但是多線程下同時調(diào)用list也不應(yīng)該頻繁full gc啊,這個地方有bug,但是不應(yīng)該導(dǎo)致頻繁 full gc。我懷疑是client.log(logentries); 這個方法本身不是線程安全的。以為我把線程同步塊鎖在了client.log(logentries);這個代碼塊上。發(fā)現(xiàn)問題也得以解決。

client.log的代碼就是一個發(fā)送相關(guān)日志、并接收返回值進(jìn)行確認(rèn),使用的是thrift框架進(jìn)行通信的。于是在接收返回值的地方,給加了點log。代碼如下:

一次詭異的full gc查找問題全過程

一次詭異的full gc查找問題全過程

一次詭異的full gc查找問題全過程

一次詭異的full gc查找問題全過程

一次詭異的full gc查找問題全過程

一次詭異的full gc查找問題全過程

從日志中我們可以看到,從返回值中讀取的字節(jié)流大小最大達(dá)1.2g甚至1.8g,這很明顯不正常啊。因為young gen 1.5g,old gen 1g,必定會拋oom。而在最上層捕獲了error,但是默認(rèn)情況下卻沒有l(wèi)og,導(dǎo)致log中看不出任何問題。

一次詭異的full gc查找問題全過程

回想起我司rpc服務(wù)也是用的thrift是用的連接池的方式,所以client肯定是非線程安全的。

問題定位到之后,準(zhǔn)備反饋給那個人。發(fā)現(xiàn)那個人已經(jīng)離職了。于是嘗試升級到最新的jar之后,發(fā)現(xiàn)他們在sendlogentry這個方法上加上了synchronized。

總結(jié)

上面給出了總結(jié)后應(yīng)該遵循的定位問題步驟。真實的查找過程絕不是按照上面的那個過程來的,這個問題的追查持續(xù)了大概兩周(每天投入1-2個小時左右吧?)。

主要有兩個坑:

gc log。開始的時候關(guān)注點一直在gc log上。從gc log來看根本不滿足發(fā)生full gc的條件。于是專注點在認(rèn)為引入的jar有在調(diào)system.gc()并沒有注意到這個-xx:+disableexplicitgc參數(shù)

對error的處理。我司日志中心提供的jar居然直接忽略了error導(dǎo)致了oom日志一直沒有顯示出來,不然問題發(fā)生時肯定就能直接定位到了。

jvm拋出oom之后,就算配置的是cms,jvm仍舊是使用的full gc來回收內(nèi)存。因為cms會有內(nèi)存碎片化問題,已經(jīng)發(fā)生了oom,可能是因為沒有連續(xù)內(nèi)存存放新申請的對象,full gc沒有內(nèi)存碎片的問題,所以直接使用full gc回收的策略是合理的。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://mp.weixin.qq.com/s/oBU0n0ajkjNfth-PuKQVRw

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产成人精品一区二区三区视频 | 国产小视频在线 | 激情五月综合 | 91av电影在线观看 | 欧美日韩在线免费观看 | 国产精品一区电影 | 中文字幕在线观看不卡视频 | 国产一区二区三区久久久 | 一级免费视频 | 一级二级在线观看 | 激情网页 | 亚洲精品自拍 | 亚洲视频综合网 | 黄小视频| 激情久久婷婷 | 亚洲精品在线播放 | 久久青草国产 | 亚洲网站在线观看 | 久久福利电影 | 亚洲一区免费 | 亚洲欧洲精品成人久久奇米网 | 伊人伊成久久人综合网站 | 亚洲在线精品 | 色综合久久88色综合天天6 | 日韩精品一区二区在线观看 | 国产精品久久久久久久久久免费 | av片免费看 | 久草网站 | 91久久精品国产91久久 | 来个一级毛片 | 亚洲国产中文字幕 | 国产aaaaav久久久一区二区 | 国产精品一区电影 | 国产又色又爽又黄 | 综合色爱| 亚洲一区中文 | 国产精品国产a级 | 激情毛片 | 做视频免费观看网站 | 国产日韩欧美在线观看 | 一区二区三区四区视频 |