1. 程式人生 > 其它 >你們專案如何排查JVM問題

你們專案如何排查JVM問題

對於還在正常執行的系統:

1.可以使用jmap來檢視JVM中各個區域的使用情況
2.可以通過jstack來檢視執行緒的執行情況,比如哪些執行緒阻塞否出現了死鎖
3.可以通過jstat命令來檢視垃圾回收的情況,特別是fullgc, 如果發現fullgc比較頻繁,那麼就得進行調優了
4.通過各個命令的結果,或者jvisualvm等 I具來進行分析
5.首先,初步猜測頻繁傳送ullgc的原因,如果頻繁發生fullgc但是又一直沒有出現記憶體溢位,那麼表示fullgc實際上回收了很多物件了,所以這些物件最好能在younggc過
程中就直接回收掉,避免這些物件進入到老年代,對於這種情況,就要考慮這些存活時間不長的物件是不是比較大,導致年輕代放不下,直接進入到了老年代,嘗試加大
年輕代的大小,如果改完之後,fullgc減少, 則證明修改有效
6.同時,還可以找到佔用CPU最多的執行緒,定位到具體的方法,優化這個方法的執行,看是否能避免某些物件的建立,從而節省記憶體

對於已經發生了O0M的系統:

1. -般生產系統中都會設定當系統發生了O0M時,成當時的dump檔案(-XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/base)
2.我們可以利用jsisualvm等I具來分析dump檔案
3.根據dump檔案找到異常的例項物件,和異常的執行緒(佔用CPU高),定位到具體的程式碼
4.然後再進行詳細的分析和除錯
總之,調優不是一蹴而就的, 需要分析、推理、實踐、總結、再分析,最終定位到具體的問題