背景
記錄一次云上排查內(nèi)存泄露的問題,最近監(jiān)控告警云上有空指針異常報(bào)出,于是找到運(yùn)維查日志定位到具體是哪一行代碼拋出的空指針異常,
問題分析
發(fā)現(xiàn)是在解析cookie的一個(gè)方法內(nèi),調(diào)用HttpServletRequest.getServerName()獲取不到拋出的NPE,這個(gè)獲取服務(wù)名獲取不到,平時(shí)都沒有出現(xiàn)過的問題,又沒有發(fā)版,那初步懷疑應(yīng)該前端或者傳輸過程有問題導(dǎo)致獲取不到參數(shù),
后續(xù)找了運(yùn)維查了ng的日志,確實(shí)存在狀態(tài)碼為499的錯(cuò)誤碼,查了一下這個(gè)是客戶端端主動(dòng)關(guān)閉請(qǐng)求或者客戶端網(wǎng)絡(luò)斷掉時(shí)報(bào)的錯(cuò)誤碼,那也就是前端斷開了請(qǐng)求,繼續(xù)排查為啥前端會(huì)中斷請(qǐng)求的原因,問了前端同學(xué)說是超時(shí)時(shí)間設(shè)置了10秒,又看了日志,確實(shí)是有處理時(shí)間超過10秒的,那問題大概定位到了。接下來就是分析處理時(shí)長(zhǎng)為什么會(huì)那么長(zhǎng),看了報(bào)錯(cuò)的時(shí)候請(qǐng)求量并沒有很大,2.0云上本身就還沒有放量,后續(xù)讓運(yùn)維查了機(jī)器有幾臺(tái)cpu用量處于30%左右,明顯高于另外幾臺(tái)3%,而且499錯(cuò)誤的集中在cpu用量高的幾臺(tái),懷疑是否是內(nèi)存問題導(dǎo)致,讓運(yùn)維跑了jstat -gcutil 看了一下,確實(shí)存在full GC問題,又跑了jmap -dump下了dump文件,定位到是ip限流的方法,有一個(gè)清除Map的方法在多線程并發(fā)情況下沒有生效,導(dǎo)致內(nèi)存泄露,知道問題后反推感覺就一切的疑問有了結(jié)果,ng報(bào)499是前置超時(shí),超時(shí)是服務(wù)頻繁full gc導(dǎo)致stw,無法處理請(qǐng)求導(dǎo)致耗時(shí)增加,ng探活接口在機(jī)器stw期間無法響應(yīng)產(chǎn)生了error.log,而有幾臺(tái)機(jī)器cpu不高是因?yàn)橹爸貑⑦^所以釋放掉了內(nèi)存沒有觸發(fā)full gc。
后續(xù)處理是改進(jìn)了ip限流的方法,測(cè)試環(huán)境復(fù)現(xiàn)問題和改動(dòng)限流方法,
(jstat命令使用參考:https://www.cnblogs.com/i-code/p/14157048.html)
1、FullGc觸發(fā)的很頻繁,時(shí)間或是次數(shù)并不是遠(yuǎn)小于Younggc的,但是每次回收都較為有效,回收后能有效清理內(nèi)存釋放空間。此時(shí)考慮內(nèi)存分配不足,應(yīng)調(diào)整Jvm啟動(dòng)參數(shù)(Xmx
Xms),以避免頻繁gc影響性能甚至因內(nèi)存不夠造成 OOM。2、FullGc后期觸發(fā)越發(fā)頻繁,每次回收后老年代內(nèi)存釋放的很少,這種情況是內(nèi)存泄漏或業(yè)務(wù)設(shè)計(jì)不合理導(dǎo)致,泄露的內(nèi)存不能被有效回收,導(dǎo)致可用空間越來越小最后直至不可用,此種問題需要針對(duì)性的解決。
總結(jié)
通過guaua的LoadingCache監(jiān)聽器的方式過期自動(dòng)處理,這次問題嵌套問題比較多,由于上報(bào)量低,ng側(cè)報(bào)了499沒有納入監(jiān)控范圍,而且機(jī)器由于重啟沒有快速發(fā)現(xiàn)問題,后續(xù)改進(jìn)是代碼側(cè)能復(fù)用規(guī)范代碼最好復(fù)用,不要重復(fù)造輪子,和測(cè)試溝通階段應(yīng)該覆蓋對(duì)應(yīng)的場(chǎng)景測(cè)試,開發(fā)需要詳盡跟測(cè)試反饋改動(dòng)點(diǎn)和測(cè)試案例評(píng)審,定位問題應(yīng)該從實(shí)際出發(fā),出現(xiàn)問題得及時(shí)從現(xiàn)有信息的結(jié)果反饋去判斷問題所在,及時(shí)處理和團(tuán)隊(duì)溝通。文章來源:http://www.zghlxwxcb.cn/news/detail-435611.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-435611.html
到了這里,關(guān)于記錄線上排查內(nèi)存泄露問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!