之前做的oa业务,上线的时候审批工作流所在的服务器,cpu飙到400%。
一般cpu彪满,频繁gc,都是死循环造成的,那么怎么排查cpu彪满的问题呢。
//top 显示进程信息
1.进入服务,使用top命令找到当前服务器进程列表,按一下P可以按照CPU进行排序。
//top -H -p [进程号],cpu使用最高的几个线程,定位到线程
2.使用top -H -p 13122命令找到当前进程的线程列表,查看CPU使用最高的线程号。
//printf “%x” [线程号],将十进制的线程号转为16进制的线程号
3.我们获取的线程号是十进制,我们需要转换为16进制printf “%x” 13254//->33c6
//jstack [进程号] |grep [16进制线程号] -A 30,查询指定线程号后30行代码
4.jstack 13122 |grep 33c6 -A 30定位到异常代码段
//jstack [进程号] |grep [16进制线程号] -C 30,查询指定线程号前后30行代码
jstack 13122 |grep 33c6 -C 30
//jstack [进程号] |grep [16进制线程号]|[16进制线程号]|[16进制线程号] -C 30,查询多个指定线程
jstack 30342 |grep '30344|30345|30346|30347|30466'