1. 程式人生 > >JProfiler工具開啟dump檔案,分析jar包程式記憶體過大後cpu100%

JProfiler工具開啟dump檔案,分析jar包程式記憶體過大後cpu100%

開發的收集車輛資料程式跑了3-5小時,就會出現如下結果


發現程式執行記憶體在這幾個紅點波動,在CPU100%出現一段時間內程式會自動結束。

後來利用工具命令分析問題得出是因為記憶體不夠導致一直在GC,因為GC Task Thread佔用CPU比較高。

具體步驟如下

ps -mp 16991 -o THREAD,tid,time |sort -rn 列印CPU最高的執行緒

printf "%x\n" 17864 把執行緒ID轉換成16進位制

jstack 16991 |grep 42b2 -A 30 列印堆疊資訊

發現這個現象是因為記憶體問題,在記憶體出現最高時候dump

jmap -dump:live,format=b,file=xxx.xxx [pid]  /path

接下來分析dump記憶體的工具有不少,比如JProfiler,jvisualvm。但是推薦使用JProfiler

這個用JProfiler有個小技巧,dump字尾要改成.hprof才能被JProfiler開啟。