使用jstack精确找到异常代码
一个CPU密集型线程的demo:
package chapter1;
public class FindJavaThreadInTaskManager {
public static void main(String[] args) {
Thread thread = new Thread(new Worker());
thread.start();
}
static class Worker implements Runnable {
@Override
public void run() {
while (true) {
System.out.println("Thread Name:" + Thread.currentThread().getName());
}
}
}
}
找到CPU利用率持续比较高的进程,获取进程号,此处PID为3036
命令:
top
找到上述进程中,CPU利用率比较高的线程号TID(十进制数),此处为3046
命令:
ps p 3036 -L -o pcpu,pid,tid,time,tname,cmd
找到上述进程中,CPU利用率比较高的线程号TID(十进制数),此处为3046
将获取的线程号(十进制数)转换成十六进制,此处为0xb46
命令:
printf "%x\n" 3046
查看进程PID为3036中
nid为0xb46的线程信息
命令:
jstack -l 3036