jstack原理

what:

  jstack是java进程中当前线程的运行情况查看工具

 

区别其他工具:

  jmap:Java进程内存分配查看工具,常用命令:jmap [ option ] pid 

  jstat:可以实时监控java进程的资源和性能,可以观察classloader、compiler、gc的相关信息

 

where

  jstack在分析java进程CPU占用过高时,是一种不错的选择。使用该工具可以查看到java进程中,具体那个线程异常,并且有对应的堆栈。具体使用见:https://www.cnblogs.com/sfzlstudy/p/15814483.html

 

how:

  jstack等命令会与jvm进程建立socket连接,发送对应的指令(jstack发送了threaddump指令),然后再读取返回的数据

  jstack有两种实现方式,一种是基于attach api,在tools.jar里可以找到,一种是基于SA的实现在sa-jdi.jar里。我们分析attach api的源码:

  

 

 

 

 

 

 

很多命令都是通过 executeCommand 来实现的,例如:datadump、threaddump、dumpheap、inspectheap、jcmd等,而最终的execute()在Mac机器上是由 BsdVirtualMachine 类来完成。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

posted @ 2022-01-18 14:57  修心而结网  阅读(168)  评论(0编辑  收藏  举报