jdk追踪线程堆栈方法

1 背景
我们经常遇到某个java进程占用CPU非常高,但又不知道他正在做什么,被什么线程给阻塞了。当然这些信息苍穹的monitor都能监控得到,非常简单就能定位到问题。但苍穹的monitor通常是通过nginx转发到web节点,再由web节点远程调用访问到其他微服务节点的monitor去的,当微服务节点近乎hang住时,monitor的web界面就刷不出信息来了。这时我们可以直接到容器中手动跟踪线程堆栈来定位问题。
2 操作步骤
(1)、top -H -p pid 先查看哪个PID的线程资源持续占用高;
(2)、通过jstack pid 导出线程信息;
(3)、printf "%0x" 线程pid 获得其16进制的值,然后查看16进制所在的线程堆栈信息。
3 分析案例
(1)top命令查看获取占用高的线程号(-p 1 表示容器中1号进程,即java主进程)
# top -H -p 1

从top命令中我们查看到5526这个线程的pid占用CPU高。
(2)然后将这个时刻的所有线程写入到日志文件中去
# /jdk/bin/jstack 1 > 1.log
(3)在日志文件中查看刚才占用CPU高的pid的线程堆栈信息
# printf "%0x" 5526

获取到
jdk追踪线程堆栈方法
1 背景我们经常遇到某个java进程占用CPU非常高,但又不知道他正在做什么,被什么线程给阻塞了。当然这些信息苍穹的monitor都能监控得到,...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



