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


      在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堆栈跟踪工具

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

      

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

    死锁检测:

      步骤一:查看cpu占用高进程
      top
      步骤二:查看cpu占用高线程
      top -H -p 17850
      步骤三:转换线程ID
      printf "%x " 17880
      45d8
      步骤四:定位cpu占用线程
      jstack 17850|grep 45d8 -A 30

    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: 垃圾回收总时间

           

  • 相关阅读:
    JDBC 实现对数据库表的增删查操作(案例)
    JDBC练习1 从控制台向数据库的表customers中插入一条数据
    JDBC PreparedStatement解决SQL注入问题
    JDBC PreparedStatement针对不同表的通用查询操作
    JDBC 针对数据库表的查询操作(2)
    JDBC 针对数据库表的查询操作(1)
    分布式锁
    浅谈Java线程安全
    Java线程池学习
    ACID
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12618566.html
Copyright © 2020-2023  润新知