top 或者 top -c
命令动态显示进程及占用资源的排行,区别是 -c
可以显示进程详细的信息( jps -lv 或者 ps aux | grep java 也可以查看进程)
接下来找到占用了大量的CPU资源的进程的pid, 使用top -bn1 -H -p <pid> 显示该pid下线程信息,如果去掉 -bn1 则显示实时
或者使用ps -mp <pid> -o THREAD,tid,time | sort -k2r sort参数根据线程占用的cpu比例进行排序
因为线程的 tid 在栈信息中是以十六进制的形式显示的,因此需要使用 printf "%x
" <tid>
命令将线程的tid转成十六进制的值,
然后执行 jstack -l <pid> | grep <thread-hex-id> -A 10
命令显示出错的堆栈信息,
pid是进程的pid,thread-hex-id
是线程的16进制id,即 printf "%x
" <tid>
的结果, -A 10
参数用来指定显示符合条件之后的行数
这样就可以精确到某一个线程的栈信息
若要看某个进程下的所有线程栈信息: jstack -l <pid>
详细介绍: