1. 程式人生 > >記一次jstack 處理堆疊溢位

記一次jstack 處理堆疊溢位

jstack 應用

首先通過:ps -ef|grep java

得到java pid

檢視哪個執行緒佔用最多資源:

找出該程序內最耗費CPU的執行緒,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid  命令檢視這個程序下面的所有執行緒佔用情況。

 

發現執行緒21742佔用最多。

 

將剛剛發現佔用cpu最多的執行緒id(21742)換算成16進位制

命令:printf "%x\n" 21742 的到 執行緒值 :54ee

檢視jstack 生成的檔案:

jstack pid | grep tid

如:jstack 21711 | grep 54ee

下面可以看出是哪行程式碼導致,檢視那行程式碼發現有死迴圈。跟蹤解決完畢。

例項:

 

通過上面的步驟可以看出一個執行緒裡面的create_file.java的75行程式碼cpu和記憶體消耗嚴重。

這個map是一個支援併發的map,裡面快取的資料太多導致一直變大。只要檢視map處理的程式碼就行了。