性能測試中發現一旦壓測,服務器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)
優化代碼即可。