最近线上机器偶尔有台cpu达到100%,还居高不下。同样负载的其他机器却正常,我想肯定是代码哪里有问题了

 

首先我们top看下

 

 

 

可定位到对应占用高的PID

然后=》ps -mp PID -o THREAD,tid,time | sort -rn

就可定位到对应TID。

然后=》printf "%x\n" TID

把TID转成16进制格式

然后=》jstack pid |grep TID -A 30 (这里TID是转16进制后的)

接下来就可看到线程堆栈数据了

 

我们这里用到的 jstack:是Java提供的命令,可用来查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

 

这里我们线上服务是由一段正则匹配引起的,先卖个坑,解决后再更新