你的應用突然出現(xiàn)了OOM異常,你會如何排查?
調(diào)優(yōu)不是一蹴而就的,需要分析、推理、實踐、總結、再分析,最終定位到縣體的問題
- 可以使用jmap來查看IVM中各個區(qū)域的使用情況
- 可以通過jstack來查看線程的運行情況,比如哪些線程阻塞、是否出現(xiàn)了死鎖
- 可以通過jstat命令來查看垃圾回收的情況,特別是fullgc,如果發(fā)現(xiàn)fullgc比較頻繁,那么就得進行調(diào)優(yōu)
- 通過各個命令的結果,或者ivisualvm等工具來進行分析
- 首先,初步猜測頻繁發(fā)送fulgc的原因,如果頻繁發(fā)生fullgc但是又一直沒有出現(xiàn)內(nèi)存溢出,那么表示fulgc實際上是回收了很多對象了,所以這些對象最好能在younggc過程中就直接回收掉,避免這些對象進入到老年代,對于這種情況,就要考慮這些存活時間不長的對象是不是比較大,導致年輕代放不下,直接進入到了老年代,嘗試加大年輕代的大小,如果改完之后,fulgc減少,則證明修改有效
- 同時,還可以找到占用CPU最多的線程,定位到具體的方法,優(yōu)化這個方法的執(zhí)行,看是否能避免某些對象的創(chuàng)建,從而節(jié)省內(nèi)存
對于已經(jīng)發(fā)生了OOM的系統(tǒng):
1.一般生產(chǎn)系統(tǒng)中都會設置當系統(tǒng)發(fā)生了OOM時,生成當時的dump文件(-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/base)
2.我們可以利用jsisualvm等工具來分析dump文件
3.根據(jù)dump文件找到異常的實例對象,和異常的線程(占用CPU高),定位到具體的代碼
4,然后再進行詳細的分析和調(diào)試
#機械人面試中的常問題##面試時最害怕被問到的問題#職保鏢-扶你上馬 文章被收錄于專欄
知識分享,交天下朋友,扶你上馬,送你一層,職業(yè)規(guī)劃,面試指導、高薪談判、背調(diào)輔助