記錄一個java佔用CPU過高問題的追蹤

性能測試中發現一旦壓測,服務器CPU立馬飆升沾滿 ,CPU佔用 777%  Loading 40+ 

1、看到是進程8825 在佔用,於是想到可能是該進程中某個線程作祟,‘H’,發現幾乎所有線程佔用差不多,我勒個去

2、通過 ps -mp pid -o THREAD,tid,time命令查看該進程的線程情況

通過上面CPU切片發現,PID 8825, TID 8874 CPU消耗 8.4%,耗時05分02秒

3、將TID 8874 轉換爲16進制,便於在jvm堆棧中查找 printf "%x\n" 8874 得到22aa

4、通過jstack命令來查看下當前內存狀態(注意一定要使用與程序運行相同的用戶,不然輸出異常):

$ jstack 8825 | grep 22aa -A 30

定位到問題:

    at com.nkg.core.helper.AESTool.getKeySpec(AESTool.java:57)
    at com.nkg.core.helper.AESTool.aesDecodeFromHex(AESTool.java:43)
    at com.nkg.core.helper.ServerKeyUtil.readServerKey(ServerKeyUtil.java:21)
    at com.nkg.core.config.ServerKeyInterceptor.preHandle(ServerKeyInterceptor.java:38)

優化代碼即可。

 

發佈了16 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章