记录一个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)
优化代码即可。