jstack 查询线程状态 定位问题

背景:客户反馈说一个ETL任务迁移Oracle数据比较慢,于是远程定位排查。
发现:1:当前迁移的表数量以及表对应的状态均正常,表的数据量均比较大,在千万级别乃至上亿。 查看本产品的监控,发现使用的cpu和内存很少,查看日志日志并无异常日志,查看druid监控 页面可看到正在执行中的sql语句。
于是需要定位是抽取端还是写入端慢。因产品为docker部署,所以,需要进入到容器里面

通过ps -ef | grep java 获取到当前的进程为6,于是通过查看线程名进行过滤,发现抽取端均是warting状态,写入端为runnable状态,故而可以得知为写入端比较慢,因为抽取端一直在等待
image.png
查看某个线程更详细的信息可以通过命令进行查看,发现jdbc一直在往oracle中写数据

jstack 6 | grep -A 40 'MT-L-'

992db4fd421638d335b49aa5c2344d1.png

最后通过其它方式,判断问题在目标端oracle数据库的资源上。

参考资料:

  1. jstack命令:教你如何排查多线程问题 https://cloud.tencent.com/developer/article/1080280
  2. Linux下grep显示前后几行信息 https://cloud.tencent.com/developer/article/1459279
  3. jstack 官方文档:http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html
  4. 工具百宝箱(1)— Java日常问题诊断方法 https://www.wangyapu.com/2020/05/05/java_trouble_shooting/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值