cpu占用率高,一方面可能是因为,程序是计算密集性的。比如大量的请求过来,每个请求有大量的正则计算,很计算的关联表排序。
还有代码中有死循环会导致cpu负载飙高。
定位问题代码位置的步骤
- cpu负载高,首先会通过监控告知到我们
- top 指令查处cpu占用率高的进程pid
- ps -ef | grep pid 看出来是什么服务
- ps -Hp pid -o THREAD,tid,time 查看该进程下哪个线程占用率高
这步是为了在日志中过滤,线程参数tid - printf "%x\n" 转换tid为16进制(dump日志里边线程号是16进制)
- jstack pid | grep tid -A 30 用jvm的线程堆栈信息指令dump日志,在日志中过滤此线程id的相关日志,定位代码位置。
参考引用:http://www.blogjava.net/hankchen/archive/2012/05/09/377735.html