Java问题定位之如何借助线程堆栈进行问题分析

本文介绍了如何借助线程堆栈进行Java应用的问题分析,包括线程死锁、CPU过高、性能下降及锁链问题。通过分析堆栈的局部、统计和对比信息,排查线程状态、锁竞争、资源使用等问题,从而定位性能瓶颈。
摘要由CSDN通过智能技术生成

在大型的应用中,线程堆栈打印出来特别多,如何从众多的信息中找到真正有用,有价值的信息,我们需要一定的技巧。本文对此详细介绍。

我们可以从三个方面分析:堆栈的局部信息,一次堆栈的统计信息,多个堆栈的对比信息。

  • 从一次的堆栈信息中,我们可以直接获取以下信息:
    • 每一个线程的调用关系,当前线程在调用哪些函数
    • 每个线程的当前状态,持有哪些锁,在等待哪些锁?
  • 从一次堆栈信息中,我们还可以统计以下信息:
    • 是否有很多线程都在等待同一个锁,说明这个系统存在性能瓶颈,导致了锁竞争
    • 当前线程的总数量
    • 大多数线程在干什么,在执行什么代码?
  • 从多次的堆栈信息中,可以得到以下信息:
    • 一个线程是否长期执行,如果每次打印堆栈某个线程一直处于同样的调用上下文中,那么说明这个线程一直执行这段代码,此时要根据代码逻辑检查,是否合理。
    • 某个线程是否长期存在获取不到锁的情况,线程是否永远得不到唤醒,如果某一个线程一直等在一个锁,就要检查占用这个锁的线程为什么不释放。
如果说打印一次线程堆栈是平面,那么打印多次就是立体了,我们可以看到一段运行的情况。

接下来从以下几个方面分析:

  • 线程死锁
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值