学软件技术,读第一手资料,去官方网站:Java SE Specifications
若想看垃圾收集的简易版本的,参见:Java垃圾收集基础
1、输入top命令,实时显示 process 的动态
截图如下
发现是PID为23958和13772的进程占用CPU太高,但是,怎么定位到具体线程或者代码呢?
2、输入 ps -mp PID -o THREAD,tid,time | more 显示线程列表
将PID换成23958
发现TID(线程ID)是24079的线程占用cpu太高,占用CPU时间快7个多小时了!其中24079是十进制的,将TID为24079转换为16进制格式
命令:printf “%x” TID
将TID替换成24079
3、通过16进制的线程ID打印线程的堆栈信息
命令:jstack PID |grep TID -A 30
这里的命令就是:jstack 23958 |grep 5e0f -A 30
上面的截图,定位到了具体的业务代码了1578行,如下:
比如如下原因会导致一直循环