性能监控之基础故障处理工具

  在JDK的bin目录中,有多种小工具,用来支持调试,监控,编译和运行等功能。

root@root:/usr/lib/jvm/java-8-openjdk-amd64/bin# ls
appletviewer  hsdb  jarsigner  javadoc  java-rmi.cgi  jdb    jinfo  jps         jstack  keytool       pack200     rmid         serialver   unpack200  xjc
clhsdb        idlj  java       javah    jcmd          jdeps  jjs    jrunscript  jstat   native2ascii  policytool  rmiregistry  servertool  wsgen
extcheck      jar   javac      javap    jconsole      jhat   jmap   jsadebugd   jstatd  orbd          rmic        schemagen    tnameserv   wsimport

1.jps:虚拟机进程状况工具

  可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID.Local Virtual Machine Identifier)

root@root:~$ jps -help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]

  root@root:/home/dev# jps -l
  1505 *.jar
  1507 *.jar

jps选项参数:
-q:只输出LVMID,省略主类的名称
-m:输出虚拟机进程启动时传递给主类main()函数的参数
-l:输出主类的全名,如果进程执行的是Jar包,则输出JAR路径
-v:输出虚拟机进程启动时的JVM参数

2.jmap:Java内存映像工具

   用于生成堆转储快照.

Usage:
    jmap [option] <pid>

option:
  -dump: 生成堆转储快照 -dump:[live,]format=b,file=<filename> <pid>
-heap: 显示java堆详细信息

  root@dev03:/home/dev# jmap -dump:format=b,file=heapDump 30138
  Dumping heap to /home/wuh151/heapDump ...
   Heap dump file created

  root@root:/home/dev# jmap -heap 30138
  Attaching to process ID 30138, please wait...
  Debugger attached successfully.
  Server compiler detected.
  JVM version is 25.242-b08

  using thread-local object allocation.
  Parallel GC with 8 thread(s)

  Heap Configuration:  

  MinHeapFreeRatio = 0 ## 对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
  MaxHeapFreeRatio = 100 ## 对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
  MaxHeapSize = 1073741824 (1024.0MB) ## 对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
  NewSize = 178782208 (170.5MB) ## 对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
  MaxNewSize = 357564416 (341.0MB) ## 对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
  OldSize = 358088704 (341.5MB) ## 对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小
  NewRatio = 2 ## 对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
  SurvivorRatio = 8 ## 对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
  MetaspaceSize = 1073741824 (1024.0MB)
  CompressedClassSpaceSize = 268435456 (256.0MB)
  MaxMetaspaceSize = 2147483648 (2048.0MB)
  G1HeapRegionSize = 0 (0.0MB)

 

 

3.jstack:Java堆栈跟踪工具

       用于生成虚拟机的当前时刻线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因。

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.144-b01 mixed mode):

"com.alibaba.nacos.client.Worker.longPolling.fixed-nacos.lingda.com-dev-mofang" #92 daemon prio=5 os_prio=0 tid=0x000000001be17000 nid=0x3f64 waiting on condition [0x000000002a49f000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000081d75d48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(Unknown Source)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
        - None

统计线程使用数量:
root@dev03:/home/dev# jstack -l 2791 | grep 'java.lang.Thread.State' | wc -l 48

 

4.jstat:虚拟机统计信息监视工具

  监视虚拟机的各种运行状态信息。

Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

参数interval count代表查询间隔和次数,如果参数省略,说明只查一次
option:
  -class 监视类加载,卸载数量,总空间及类装载所耗费的时间
-gc 监视java堆状况
-gcutil 与-gc基本相同,输出主要关注已使用空间占总空间的百分比
...

  root@root:/home/dev# jstat -gcutil 25791
  S0    S1   E     O     M     CCS   YGC YGCT   FGC FGCT  GCT
  97.84 0.00 61.84 77.63 97.22 95.68 338 58.808 2   1.787 60.595

  S0:  幸存0区当前使用比例

  S1:  幸存1区当前使用比例

  E:   伊甸区使用比例

  O:   老年代使用比例

  M:   元数据区使用比例

  CCS: 压缩使用比例

  YGC: 年轻代垃圾回收次数

  YGCT:年轻代垃圾回收时间

  FGC: 老年代垃圾回收次数

  FGCT:老年代垃圾回收时间

  GCT: 垃圾回收总时间

 

       

posted @ 2020-04-02 22:44  鄙人取个名字好难  阅读(290)  评论(0编辑  收藏  举报