一、排查過程
問題發(fā)現(xiàn)是因為當(dāng)時接到了內(nèi)存UMP報警信息,如下:
通過查看PFinder發(fā)現(xiàn)內(nèi)存一直在增長,沒有停止跡象,觸發(fā)fullGC也并沒有下降趨勢:
當(dāng)機立斷,先立即去NP上摘除了此臺機器流量,然后繼續(xù)觀察,發(fā)現(xiàn)內(nèi)存依然在不斷增長。
隨即查看故障分析,并沒有得到有效信息:
因為流量已經(jīng)摘除,那么繼續(xù)觀察到底哪里的問題,約半小時后然后接到了機器的宕機告警如下:
由于在應(yīng)用啟動參數(shù)里配置了dump路徑,那么就馬上去把dump文件下載下來分析。
隨后找到對應(yīng)IP機器的目錄,下載了dump文件java_pid432.hprof核對時間沒有問題,隨即使用MAT工具開展分析,通過泄露分析結(jié)果直接就可以看出problem1與problem2都是一個同一個問題,2個線程分別占用1.8G、1.5G:
通過查看問題對應(yīng)的代碼類方法,發(fā)現(xiàn)該方法功能是"導(dǎo)出WMS保質(zhì)期商品數(shù)據(jù)",該方法會調(diào)用庫存分頁接口查詢保質(zhì)期商品,大致如下:
1、查詢無數(shù)據(jù)直接導(dǎo)出空表;
2、第一頁查詢總量小于1000的話直接把數(shù)據(jù)寫入第一個sheet并導(dǎo)出表格;
3、第一頁查詢總量大于1000則循環(huán)分頁查詢,每1000條數(shù)據(jù)生成一個sheet表格進(jìn)行導(dǎo)出。
可以看到,org.apache.poi.hssf.usermodel.HSSFWorkbook對象數(shù)量已經(jīng)達(dá)到702個了。
翻看具體代碼部分如下:
二、解決思路
經(jīng)過對該功能代碼分析,本著先解決問題的原則,先將循環(huán)調(diào)用功能進(jìn)行限制,通過ducc配置導(dǎo)出頁數(shù)大小限制,來避免一直循環(huán)調(diào)用。
至此,問題初步解決完畢,調(diào)整后沒有出現(xiàn)問題。
但是,這個功能的優(yōu)化并沒有結(jié)束,隨后將該問題及功能邏輯反饋給產(chǎn)品及庫存相關(guān)方,一起討論解決商家導(dǎo)出的問題,一方面我們要保障商家體驗,另一方面又要確保系統(tǒng)穩(wěn)定性。后續(xù)要從這2方面入手進(jìn)行功能的優(yōu)化,不斷為提升商家體驗而努力。
三、總結(jié)分析
回過頭來咱們再分析以下這個功能,通過系統(tǒng)日志及監(jiān)控,發(fā)現(xiàn)該功能商家日常使用較少,并且大部分商家的保質(zhì)期商品較少,極少數(shù)會存在有非常多保質(zhì)期商品數(shù)據(jù)的情況。但是一旦出現(xiàn)這樣的問題就會很致命,所以在導(dǎo)出功能設(shè)計之初我們就應(yīng)該考慮到將來任何可能出現(xiàn)的情況,并做好提前的預(yù)防。另外就是要做功能的限制,例如導(dǎo)出次數(shù)、導(dǎo)出數(shù)據(jù)量的限制功能來保障商家體驗及系統(tǒng)的安全穩(wěn)定。
另外再說一下,對導(dǎo)出功能的理解,對于商家而已,導(dǎo)出需求是正常的。但是過多大批量數(shù)據(jù)的一起導(dǎo)出無論對哪個系統(tǒng)來說都是非常危險的一個功能。以下列舉了一些個人總結(jié)的導(dǎo)出功能設(shè)計時的一些常見規(guī)則,希望大家一起參與討論分析,拙見如下:
- 明確導(dǎo)出數(shù)據(jù)的價值分析
- 明確導(dǎo)出數(shù)據(jù)的使用傾向
- 明確導(dǎo)出數(shù)據(jù)的安全要求
- 明確導(dǎo)出數(shù)據(jù)的權(quán)限控制
- 明確需要導(dǎo)出的數(shù)據(jù)量級
- 明確導(dǎo)出數(shù)據(jù)的方式方法
- 明確到倉數(shù)據(jù)的頻率頻次
- 明確導(dǎo)出數(shù)據(jù)的性能效率
- 明確導(dǎo)出數(shù)據(jù)的限制方法
- 明確導(dǎo)出功能的隔離及降級方案
- 明確導(dǎo)出數(shù)據(jù)的格式樣式
- 明確導(dǎo)出數(shù)據(jù)的下載方案
- 明確導(dǎo)出數(shù)據(jù)的錯誤監(jiān)控
以上是個人想到的一些導(dǎo)出設(shè)計的簡單規(guī)則,需要產(chǎn)研測一起溝通明確,還希望大家多提提意見,一起完善導(dǎo)出規(guī)則。
另外我們再從商家角度來考慮一下導(dǎo)出的目的,個人從詢問業(yè)務(wù)及相關(guān)人員,發(fā)現(xiàn)商家導(dǎo)出數(shù)據(jù)有以下一些目的:
- 存儲歸檔方便查歷史資料
- 利用系統(tǒng)業(yè)務(wù)數(shù)據(jù)進(jìn)行數(shù)據(jù)分析已指導(dǎo)商家業(yè)務(wù)工作或給領(lǐng)導(dǎo)匯報工作
- 導(dǎo)出來使用表格工具等其他商家熟悉的工具進(jìn)行查看,更便捷便利
- 對導(dǎo)出的數(shù)據(jù)進(jìn)行加工,并用于其他非京東系統(tǒng)的數(shù)據(jù)輸入
- 無意識的導(dǎo)出并無其他作用
以上是個人總結(jié)的一些商家導(dǎo)出的需求目的,其實針對商家導(dǎo)出來說可能還有很多其他目的,我們不能全部都能了解。但是可以積極與商家溝通理解商家的真實目的。
另外,我們需要去分析商家的訴求,挖掘商家需求背后的目的。假如有個服裝行業(yè)的商家需要做服務(wù)訂單業(yè)務(wù)數(shù)據(jù)、庫存數(shù)據(jù)分析,是否我們可以利用數(shù)智側(cè)的系統(tǒng)能力,為商家打造通用的數(shù)據(jù)分析能力呢,這樣既可以避免導(dǎo)出數(shù)據(jù)手動分析的雞肋,同時也提升了商家對京東物流的系統(tǒng)使用體驗。
以上僅僅代表個人觀點,一點愚見,還請大家批評指正!
歡迎大家一起探討!
作者:京東物流 劉鄧忠文章來源:http://www.zghlxwxcb.cn/news/detail-729324.html
來源:京東云開發(fā)者社區(qū) 自猿其說Tech 轉(zhuǎn)載請注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-729324.html
到了這里,關(guān)于記一次老商家端應(yīng)用內(nèi)存突然飚高原因分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!