1. 程式人生 > >記一次專案執行cpu過高處理

記一次專案執行cpu過高處理

第一次處理這種問題,新手不懂的從何下手走了不少彎路,記錄一下,以後借鑑.

對於cpu執行過高的問題,首先要列印堆疊資訊,和執行緒執行cpu使用情況:

   1.列印堆疊資訊:

      先通過top -c找到自己的執行緒對應的id值:

     

   jstack -l pid值 > new.txt 把當前執行緒的棧打到檔案中

   ps -mp pid值 -o THREAD,tid,time >a.txt  把當前執行緒的cpu使用情況打到檔案中,通過分析找到佔用cpu最高的執行緒

  

通過printf "%x\n" 執行緒id來獲取執行緒對應的16進位制的值,通過16進位制的值獲取其對應的堆疊資訊,例如28605對應的16進製為6fbd,對應的棧資訊為:

對應的是一個jetty的程序,對於這種,一般情況下就不是程式的問題,可以通過升級jar包來解決,如果無法確定的話可以只起一個jetty服務,避免加入自己的程式碼,自己發請求進行測試。

如果是定位到了自己的程式碼裡那可能是存在死迴圈,需要自行進行判斷.

推薦一個好用的工具,可以看匯出的堆疊檔案:jca.jar,通過java -Xmx200m -jar jca457.jar來執行.