线上问题定位---jstack

 

 

1、通过top 拿到占用cpu比较高的几个进程的pid ,如A
2、top -Hp A:找出占用cpu过高的线程,记录下PID 如1,2,转换成十六进制。printf "%x\n" 21742,如b
3、jstack -l A>test.txt  在test.txt文档中找b相关的信息就行分析

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

Runnable

线程正在运行中。一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递SQL到数据库执行,有可能在对某个文件操作,有可能进行数据类型等转换。

Deadlock

 

同一个地址被不同线程占用。

Wait on condition

等待资源,或等待某个条件的发生。具体原因需结合 stacktrace来分析。

    • 常见情况是该线程在 sleep,等待 sleep的时间到了时候,将被唤醒。关键字:TIMED_WAITING,sleeping,parking。TIMED_WAITING可能是调用了有超时参数的wait所引起的。parking指线程处于挂起中。
      下面是一个典型的sleep引起的Wait on condition

 

Blocked

线程阻塞,是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。
如果线程处于Blocked状态,但是原因不清楚。可以使用jstack -m pid得到线程的mixed信息。

 

 

 

 

参考:https://blog.csdn.net/bluetjs/article/details/78040571

posted @ 2020-08-17 14:09  后知、后觉  阅读(431)  评论(0编辑  收藏  举报