?
[if !supportLists]1觉壶、 [endif]問題現(xiàn)象描述
國際化中臺新增文案,編輯文案20用戶并發(fā)時件缸,部分請求結(jié)果返回502 bad geteway錯誤铜靶,
[if !supportLists]2、?[endif]問題定位過程
2.1他炊、初步懷疑是nignx服務(wù)器問題争剿,查看nignx日志,定位是后端應(yīng)用報錯
[if !vml]
[endif]
2.2佑稠、查看if-zaif-cps-copywriting-agent-mock-dev應(yīng)用服務(wù)器有重啟記錄秒梅。
確認是在重啟時,請求返回失敗舌胶。
[if !vml]
[endif]
2.3捆蜀、再查看重啟原因是因為內(nèi)存資源消耗完,日志存在OutOfMemoryError的報錯信息幔嫂,容器對服務(wù)進行的重啟辆它。
[if !vml]
[endif]
2.3、分析內(nèi)存資源耗盡的原因履恩,在Linxu后端使用命令查看內(nèi)存GC情況
Jstat ?-gcutil 6 1000
[if !vml]
[endif]
結(jié)果分析锰茉,E — Heap上的 Eden space 區(qū)已使用空間的百分比消耗非常快切心,不停進行YGC飒筑,但是內(nèi)存基本不釋放片吊。待old區(qū)內(nèi)存百分比被占滿后開始Full gc,不能釋放內(nèi)存协屡,多次嘗試FULL gc仍不能釋放內(nèi)存俏脊,容器重啟該服務(wù)。
[if !supportLists]3肤晓、?[endif]問題分析過程
3.1爷贫、使用—命令生成dump文件。對內(nèi)存進行分析
jmap -dump:format=b,file=/tmp/dump.dat? PID或jmap-dump:live,format=b,file=aaa.hprof 22400
3.2补憾、down到本地后使用MAT工具對dump文件分析
[if !vml]
[endif]
初步定位內(nèi)存泄漏的代碼位置
3.3漫萄、在Leak
Suspects頁面會給出可能的內(nèi)存泄露,進入Leak Suspects盈匾,查看那些類可能發(fā)生內(nèi)存泄露
[if !vml]
[endif]
點擊Details發(fā)現(xiàn)有自己的代碼腾务。
[if !vml]
[endif]
3.4、線程池的問題威酒,進入Details查看詳情:
在詳情頁面Shortest Paths To the Accumulation
Point表示GC root到內(nèi)存消耗聚集點的最短路徑窑睁,如果某個內(nèi)存消耗聚集點有路徑到達GC root挺峡,則該內(nèi)存消耗聚集點不會被當做垃圾被回收
[if !vml]
[endif]
查看前面占用大的class
[if !vml]
[endif]
如果類的Objects占用很大葵孤,極可能就是這里的問題。
[if !vml]
[endif]
[if !supportLists]4橱赠、?[endif]問題解決方案
[if !vml]
[endif]
[if !vml]
[endif]
如上只是修改其中一個可能存在性能問題的代碼
[if !supportLists]5尤仍、?[endif]優(yōu)化后結(jié)果
具體問題暫未徹底優(yōu)化,當前性能結(jié)果滿足生產(chǎn)業(yè)務(wù)量狭姨,且存在雙實例宰啦,不影響生產(chǎn)業(yè)務(wù),對生產(chǎn)環(huán)境進行監(jiān)控觀察后根據(jù)情況再審視是否再次優(yōu)化饼拍。