电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

jdk追踪线程堆栈方法

来源:金蝶云社区作者:金蝶2024-09-238

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 


image.webp


从top命令中我们查看到5526这个线程的pid占用CPU高。


(2)然后将这个时刻的所有线程写入到日志文件中去
# /jdk/bin/jstack 1 > 1.log


(3)在日志文件中查看刚才占用CPU高的pid的线程堆栈信息

# printf "%0x" 5526


image.webp


获取到

jdk追踪线程堆栈方法

1 背景我们经常遇到某个java进程占用CPU非常高,但又不知道他正在做什么,被什么线程给阻塞了。当然这些信息苍穹的monitor都能监控得到,...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信