jstack常规排查问题方式

常规问题排查方式

在多线程程序中,如果出现的问题是数据异常类的问题,比较难排查需要一点点的检查代码。如果说是资源类的问题排查起来相对来说比较简单。常用的命令就是 top/jps 以及ps 定位出是哪个进程。然后通过jstack命令打出这个进程的全部线程堆栈,接下来就是分析打印的堆栈信息了。在堆栈信息里面打印的线程状态有:

 死锁,Deadlock(重点关注)
 执行中,Runnable  
 等待资源,Waiting on condition(重点关注)
 等待获取监视器,Waiting on monitor entry(重点关注)
 暂停,Suspended
 对象等待中,Object.wait() 或 TIMED_WAITING
 阻塞,Blocked(重点关注) 
 停止,Parked

可能存在的情况:

  • 线程状态为“Runnable ”

    该状态表示线程具备所有运行条件,在运行队列中准备操作系统的调度,或者正在运行。

  • 线程状态为“waiting for monitor entry”

    意味着它 在等待进入一个临界区 ,所以它在”Entry Set“队列中等待。
    此时线程状态一般都是 Blocked: java.lang.Thread.State: BLOCKED (on object monitor)

  • 线程状态为“waiting on condition”

    说明它在等待另一个条件的发生,来把自己唤醒,或者干脆它是调用了 sleep(N)。此时线程状态大致为以下几种:

    • java.lang.Thread.State: WAITING (parking):一直等那个条件发生;
    • java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定时的,那个条件不到来,也将定时唤醒自己。
  • 如果大量线程在“waiting for monitor entry”

    可能是一个全局锁阻塞住了大量线程。

    如果短时间内打印的 thread dump 文件反映,随着时间流逝,waiting for monitor entry 的线程越来越多,没有减少的趋势,可能意味着某些线程在临界区里呆的时间太长了,以至于越来越多新线程迟迟无法进入临界区。

  • 如果大量线程在“waiting on condition”:

    能是它们又跑去获取第三方资源,尤其是第三方网络资源,迟迟获取不到Response,导致大量线程进入等待状态。
    所以如果你发现有大量的线程都处在 Wait on condition,从线程堆栈看,正等待网络读写,这可能是一个网络瓶颈的征兆,因为网络阻塞导致线程无法执行。

  • 线程状态为“in Object.wait()”:

    说明它获得了监视器之后,又调用了 java.lang.Object.wait() 方法。

    每个 Monitor在某个时刻,只能被一个线程拥有,该线程就是 “Active Thread”,而其它线程都是 “Waiting Thread”,分别在两个队列 “ Entry Set”和 “Wait Set”里面等候。在 “Entry Set”中等待的线程状态是 “Waiting for monitor entry”,而在 “Wait Set”中等待的线程状态是 “in Object.wait()”。

    当线程获得了 Monitor,如果发现线程继续运行的条件没有满足,它则调用对象(一般就是被 synchronized 的对象)的 wait() 方法,放弃了 Monitor,进入 “Wait Set”队列。

    此时线程状态大致为以下几种:
    java.lang.Thread.State: TIMED_WAITING (on object monitor);
    java.lang.Thread.State: WAITING (on object monitor);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值