java jstack 分析工具_JAVA程序分析工具jstat和jstack

jstat

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。

jstat -options 可以列出当前JVM版本支持的选项。

top

这里主要查进程相关线程的资源使用情况。

jstack

Java Virtual Machine Stack Trace for Java 显示虚拟机的线程快照

jstack命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如请求外部资源导致的长时间等待、线程间死锁、死循环等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

1、使用jstat -gc显示gc的信息,查看gc的次数,及时间

[root@VM_101_10_centos output]# /usr/local/jdk/bin/jstat -gc 15834 250 20

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402203.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402518.7 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402518.7 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402826.0 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 402826.0 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 403040.3 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 404001.7 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

52416.0 52416.0 0.0 17984.6 419456.0 404322.4 524288.0 76193.9 72088.0 70425.5 8856.0 8528.0 27 0.719 4 0.124 0.843

2、使用jstat -gcutil统计gc信息

[root@VM_101_10_centos output]# /usr/local/jdk/bin/jstat -gcutil 15834

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT

32.05 0.00 20.83 14.53 97.79 96.30 28 0.730 4 0.124 0.854

3、使用top -Hp显示进程所有的线程信息查找CPU耗时最长线程PID

[root@VM_101_10_centos output]# top -Hp 15834

top - 11:21:25 up 31 days, 16:20, 3 users, load average: 0.02, 0.02, 0.05

Threads: 96 total, 0 running, 96 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 8010308 total, 399352 free, 4824492 used, 2786464 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 2860188 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

15834 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.00 java

15837 root 20 0 4783692 900036 19164 S 0.0 11.2 0:10.91 java

15838 root 20 0 4783692 900036 19164 S 0.0 11.2 0:02.02 java

15839 root 20 0 4783692 900036 19164 S 0.0 11.2 0:02.02 java

15840 root 20 0 4783692 900036 19164 S 0.0 11.2 0:01.99 java

15841 root 20 0 4783692 900036 19164 S 0.0 11.2 0:02.09 java

15842 root 20 0 4783692 900036 19164 S 0.0 11.2 0:03.29 java

15843 root 20 0 4783692 900036 19164 S 0.0 11.2 0:12.46 java

15844 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.03 java

15845 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.07 java

15846 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.00 java

15847 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.00 java

15848 root 20 0 4783692 900036 19164 S 0.0 11.2 0:57.35 java

15849 root 20 0 4783692 900036 19164 S 0.0 11.2 0:53.66 java

15850 root 20 0 4783692 900036 19164 S 0.0 11.2 0:08.55 java

15851 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.22 java

15852 root 20 0 4783692 900036 19164 S 0.0 11.2 1:05.21 java

15864 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.14 java

15885 root 20 0 4783692 900036 19164 S 0.0 11.2 0:26.94 java

15886 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.00 java

15890 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.00 java

15891 root 20 0 4783692 900036 19164 S 0.0 11.2 0:31.89 java

15893 root 20 0 4783692 900036 19164 S 0.0 11.2 0:00.08 java

4、使用printf处理线程的16进制形式

[root@VM_101_10_centos output]# printf "%x\n" 15852

3dec

5、使用jstack查找耗时进程是哪个函数

[root@VM_101_10_centos output]# jstack 15834 |grep 3dec

"VM Periodic Task Thread" os_prio=0 tid=0x00007f0350135000 nid=0x3dec waiting on condition

[root@VM_101_10_centos output]# jstack 15834 |grep 3de8

"C2 CompilerThread0" #6 daemon prio=9 os_prio=0 tid=0x00007f0350105800 nid=0x3de8 waiting on condition [0x0000000000000000]

[root@VM_101_10_centos output]# jstack 15834 |grep 3de9

"C2 CompilerThread1" #7 daemon prio=9 os_prio=0 tid=0x00007f0350108000 nid=0x3de9 waiting on condition [0x0000000000000000]

6、查找函数功能

"VM Periodic Task Thread"

该线程是JVM周期性任务调度的线程,它由WatcherThread创建,是一个单例对象。该线程在JVM内使用得比较频繁,比如:定期的内存监控、JVM运行状况监控。

"CompilerThread"

用来调用JITing,实时编译装卸CLASS。通常JVM会启动多个线程来处理这部分工作,线程名称后面的数字也会累加,比如CompilerThread1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值