最近線上環境系統常常出現內存暴漲的現象,前段時間常常出現數據庫服務器CPU暴增(常常100%)的狀況。通過逐步排查,最終解決問題,先將解決過程記錄下來。html
1.排查報錯日誌
運維反應內存漲的快,咱們第一反應確定是拿到日誌,進行分析,發現不少GC,初步判定內存泄漏
2.查看tomcat線程
命令:ps -ef|grep tomcat
3.查看該pid下線程佔用狀況
命令:top -Hp [pid]
會發現前幾個線程(eg:pid一、pid2等)佔用資源比較多,幾乎佔用了整個cpu資源,將pid一、pid2等轉換成16進制pid1_1六、pid2_16.
3.1 線上問題比較緊急時,能夠先殺掉這些線程,而後在逐步排查
命令:kill -9 [pid]
4.下載當前java線程棧,我公司路徑/usr/java/jdk1.7.0_80/bin/jstack -l [pid] >/webtv/gc.txt
5.分析第4步中的線程棧,排查步驟3中的pid1_1六、pid2_16等線程具體緣由
6.若是前面的步驟還不能解決問題,則進行以下一步,dump該pid下java堆數據,/usr/java/jdk1.7.0_80/bin/jmap -dump:format=b,file=/webtv/gc.hprof [pid
7.使用MAT工具(自行百度下載)加載如上堆文件,而後進行分析。java