zoukankan      html  css  js  c++  java
  • 虚拟机性能监控和故障处理工具

    jdk 的bin目录下面附带了很多小工具来帮助我们对jvm进行监控和分析,下面主要分析几种常见的工具

    名称     作用
    jps JVM Process Status Tool,现实指定系统内所有的HotSpot虚拟机进程 
    jstat JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各个方面的运行参数 
    jinfo Configuration Info for Java,现实虚拟机配置信息
    jmap Memory map for java,生成虚拟机的内存转储快照
    jhat JVM heap Dunp Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务,让用户可通过浏览器查看 
    jstack Stack Track for java ,显示虚拟机线程快照

     

     

     

     

     

     

     

     

     

     

    一、JPS(Java Process Status Tool)

        主要是可以找到想要监控的相关进程的Id和虚拟机进程启动时JVM参数,如果执行jps命令没有反应,可以执行source /etc/profile试一试

      

        例子: 

        

     

    二、jstat :虚拟机统计信息监控工具

        

        

      例子:

        

      结果说明:  

    Loaded 类装载数量
    Bytes 类装载总空间、类卸载总空间
    Unloaded 类卸载数量
    Time 类装载所耗费的时间
    S0C 新生代中Survivor space中S0当前容量的大小(KB)
    S1C 新生代中Survivor space中S1当前容量的大小(KB)
    S0U 新生代中Survivor space中S0容量使用的大小(KB)
    S1U 新生代中Survivor space中S1容量使用的大小(KB)
    EC Eden space当前容量的大小(KB)
    EU Eden space容量使用的大小(KB)
    OC Old space当前容量的大小(KB)
    OU Old space使用容量的大小(KB)
    PC(MC) Permanent space(Meta Space)当前容量的大小(KB),在JDK1.8 虚拟机移除了永久代,用元空间代替
    PU(MC) Permanent space(Meta Space)使用容量的大小(KB),在JDK1.8 虚拟机移除了永久代,用元空间代替
    CCSC 压缩类空间大小
    CCSU 压缩类空间使用大小
    YGC 从应用程序启动到采样时发生 Young GC 的次数
    YGCT 从应用程序启动到采样时 Young GC 所用的时间(秒)
    FGC 从应用程序启动到采样时发生 Full GC 的次数
    FGCT 从应用程序启动到采样时 Full GC 所用的时间(秒)
    GCT T从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC
    S0 新生代中Survivor space中S0当前使用比例
    S1 新生代中Survivor space中S1当前使用比例
    E 伊甸园区使用比例
    O 老年代使用比例
    M 元数据区使用比例
    CCS 压缩使用比例
    NGCMN 新生代最小容量
    NGCMX 新生代最大容量
    NGC 当前新生代容量
    OGCMN 老年代最小容量
    OGCMX 老年代最大容量
    OGC 当前老年代大小
    MCMN 最小元数据容量
    MCMX 最大元数据容量
    CCSMN 最小压缩类空间大小
    CCSMX 最大压缩类空间大小
    LGCC 垃圾回收的原因
    GCC 垃圾回收的原因
    TT 对象在新生代存活的次数
    MTT 对象在新生代存活的最大次数
    DSS 期望的幸存区大小
    S0CMX 最大新生代中Survivor space中S0大小
    S1CMX 最大新生代中Survivor space中S1大小

        

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    三、jinfo:java配置信息工具

        

     

    四、jmap:java内存映像工具,用于生成堆转储快照

     

      例子和结果说明:

    root@VM-16-2-ubuntu:/home/ubuntu# jmap -heap 1491
    Attaching to process ID 1491, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.144-b01
    
    using thread-local object allocation.
    Mark Sweep Compact GC
    
    Heap Configuration:        #类的初始化配置
       MinHeapFreeRatio         = 40        #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率  
       MaxHeapFreeRatio         = 70            #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率  
       MaxHeapSize              = 228589568 (218.0MB)  #-XX:MaxHeapSize=设置JVM堆的最大大小
       NewSize                  = 4849664 (4.625MB)     #-XX:NewSize=设置JVM堆的‘新生代’的默认大小    
       MaxNewSize               = 76152832 (72.625MB)    #-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
       OldSize                  = 9830400 (9.375MB)    #-XX:OldSize=设置JVM堆的‘老生代’的大小
       NewRatio                 = 2            #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
       SurvivorRatio            = 8             #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
       MetaspaceSize            = 21807104 (20.796875MB)     #-XX:MetaspaceSize=<value>:设置JVM堆的元空间初始大小      
       CompressedClassSpaceSize = 1073741824 (1024.0MB)  #压缩类空间大小
       MaxMetaspaceSize         = 17592186044415 MB       #-XX:MaxMetaspaceSize=512m :设置JVM堆的元空间最大大小  
       G1HeapRegionSize         = 0 (0.0MB)        #G1收集器划分的Region的大小
    
    Heap Usage:
    New Generation (Eden + 1 Survivor Space):
       capacity = 8060928 (7.6875MB)
       used     = 1481128 (1.4125137329101562MB)
       free     = 6579800 (6.274986267089844MB)
       18.374162379319106% used
    Eden Space:
       capacity = 7208960 (6.875MB)
       used     = 1406328 (1.3411788940429688MB)
       free     = 5802632 (5.533821105957031MB)
       19.508056640625% used
    From Space:
       capacity = 851968 (0.8125MB)
       used     = 74800 (0.0713348388671875MB)
       free     = 777168 (0.7411651611328125MB)
       8.779672475961538% used
    To Space:
       capacity = 851968 (0.8125MB)
       used     = 0 (0.0MB)
       free     = 851968 (0.8125MB)
       0.0% used
    tenured generation:
       capacity = 17690624 (16.87109375MB)
       used     = 17520224 (16.708587646484375MB)
       free     = 170400 (0.162506103515625MB)
       99.03677789997684% used
    
    13378 interned Strings occupying 1836560 bytes.

    五、jhat : 虚拟机对转储快照分析工具,与jmap搭配使用,来分析jmap生成的堆转储快照。

      这个比较少用到

     

    六、jstack:java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机每条线程正在执行的方法堆栈集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因。

      

     

      上面的都是命令行工具,下面两个是可视化工具

     

    七、JConsole:java监视与管理控制台

      

    可以监控本地进程和远程进程,本地进程比较简单可以直接选择监控的进程。远程linux上面的java虚拟机进程则需要进行相关的配置。

    先修改tomcat的bin目录下面的catalina.sh文件,在Execute The Requested Command 这一行下面增加如下配置

    # ----- Execute The Requested Command -----------------------------------------
    JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote"      #ip为服务器真实ip
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"                #远程端口
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"      #是否需要密码
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.pwd.file=/opt/jdk1.8.0_144/jre/lib/management/jmxremote.password"

    然后进入/opt/jdk1.8.0_144/jre/lib/management/下,复制一份jmxremote.password.template  ,改名为jmxremote.password,将最后两行的注释放开,同时修改密码。

    修改jmxremote.password的文件权限 chmod 600 jmxremote.password jmxremote.access

     然后就可以远程连接了。

    下图分别是本地和远程的监控图

    八、jvisualvm:多合一故障处理工具

       jvisualvm可视化工具和jconsole一样,也是需要进行上述配置才能远程。监控界面如下

     如果jvisualvm  无法安装插件,则通过下面的链接来下载后安装

      https://visualvm.github.io/pluginscenters.html

     

      

        

  • 相关阅读:
    JDBC数据库连接
    JDBC驱动程序类型
    JDBC简单示例代码
    JDBC SQL语法
    JDBC是什么?
    JDBC快速入门教程
    JUnit4参数化测试实例
    JUnit套件测试实例
    JUnit4时间(超时)测试实例
    JUnit4忽略(Ignore)测试实例
  • 原文地址:https://www.cnblogs.com/kyleinjava/p/9673014.html
Copyright © 2011-2022 走看看