通过进程找到问题线程,打印相关输出

像JVM如果出了问题,就要通过java主进程找到问题线程,再把问题线程通过jstack将堆信息输出出来进行排错,通过以下流程来解决

1.通过top命令找到CPU消耗(%CPU列)最高的进程, 并记住PID
2.通过top -Hp PID 找到CPU消耗(%CPU列)最高的线程, 并记住线程TID
通过printf “%x\n” 十进制线程TID # 将十进制转成十六进制
3.通过jstack PID | grep 十六进制TID -A 30

例如:
在这里插入图片描述
找到java主进程
然后top -Hp 11632

在这里插入图片描述
如果觉得这里哪个CPU负载高,或者有问题,找出线程的PID,即TID,将其转换为16进制(目的是在JVM中作为关键字做筛选)

这里以11635线程为例
printf “%x\n” 11635
得到2d73

最后通过jstack进行过滤输出(注意jstack后边跟的是进程id不是线程id)
jstack 11632 | grep 2d73 -A 30
如果有输出,即是故障线程的输出,如果没输出,就通过jstack 11632进行排错,可将其重定向出来交由开发排查

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值