jstack 分析程序性能

摘录自:https://www.jianshu.com/p/6690f7e92f27

简要说明下步骤:

  1:通过top命令,cpu,占用率较高的进程

  2:通过 top -Hp PID 查看该进程中线程的cpu 占用情况,查找出占用cpu占用时间比较长的线程的PID

  3:  通过 jstack PID 或者 jstack -l >xxx.stack 输出到文件 ,查看进程的堆栈状态 。

  

注意事项:

  1:top 命令结果的查看项含义,请参照 Top命名详解

  2:jstack -Hp PID 可能会报如下错误 :

[root@sysware-dts-point-t01 ~]# jstack -l 22056 >/sysware/22.stack
22056: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

  这个可以参考博客:https://blog.csdn.net/jgwei/article/details/12079147  

  3:jstack查找出堆栈情况,如何定位到占用cpu比较高的对应线程的调用栈

    在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;

    隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别;


    

原文地址:https://www.cnblogs.com/wenq001/p/9444364.html