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

      JDK开发团队选用Java来实现这些监控,当应用程序部署到生产环境后,无论直接接触物理服务器还是远程Telnet到服务器上都可能会受到限制。借助tools.jar类库里面的接口,可以直接在应用程序中实现功能强大的监控分析功能。

    名称 主要作用
    jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程,并显示虚拟机执行朱磊名称以及这些进程的本地虚拟机唯一ID
    jstat JVM Statistics Monitoring Tool,用于手机HotSpot虚拟机各方面的运行数据
    jinfo Configuration Info for Java,只显示虚拟机配置星系
    jmap Memory Map for Java,生成虚拟机的内存转储快照
    jhat JVM Heap Dump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
    jstack Stack Trace for Java,显示虚拟机的线程快照

      jps虚拟机进程状况工具

        jsp(JVM Process Status Tool)可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)

        命令格式  jps [options] [hostid]

        jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名

    options comment
    -q 只输出LVMID,省略主类的名称
    -m 输出虚拟机锦绣华城能启动时传递给主类main()函数的参数
    -l 输出主类的全名,若进程执行的是Jar包,输出Jar包
    -v 输出虚拟机进程启动时JVM参数

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

        jstat(JVM Statistics-Monitoring Tool)用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机进程中类装载,内存,垃圾收集,JIT编译等运行数据。

        命令格式  jstat [ option vmid [ interval [s|ms] [count] ] ]  对于命令格式中的VMID和LVMID:若是本地虚拟机进程,VMID和LVMID是一致的,若是远程虚拟机进程,那么VMID的格式为[protocol:] [//_]lvmid[@hostname[:port]/servername]。interval和count分别代表查询间隔和次数。若胜率这两个参数,说明只能查询一次。option代表用户希望查询的虚拟机信息,主要分为3类:类装载,垃圾收集,运行期编译状况。

        e.g: jstat -gc 2764 250 20 //250ms查询一次进程2764垃圾收集状况,一共查询20次

    option comment
    -class 监视类装载,卸载数量,总空间以及类装在所耗费的时间
    -gc 监视Java堆状况,包括Eden区,两个Survivor区,老年代,永久代等的容量,已用空间,GC时间合计等信息
    -gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大,最小空间
    -gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
    -gccause  与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
    -gcnew 监视新生代GC状况
    -gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大,最小空间
    -gcold 监视老年代GC状况
    -gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大,最小空间
    -gcpermcapacity 输出永久代使用到的最大,最小空间
    -compiler 输出JFT编译期编译过的方法,耗时等信息
    -printcompilation 输出已经被JIT编译的方法

         

      

        E代表Eden使用的空间百分比,S0,S1分别表示Survivor0,Survivor1所占的空间百分比。O代表Old老年代所占用的百分比,P代表Permanent永久代所占的空间百分比。YGC代表Minor GC(Young GC)发生的次数,YGCT代表发生Young GC的耗时。FGC代表Full GC发生的次数,FGCT代表Full GC发生的时长。GCT代表GC Time,发生GC总耗时。

      jinfo:Java配置信息工具

        jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机各参数。使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表。

        命令格式 jinfo [option] pid

        jinfo的-flag选项可以查询未被显式指定的参数的系统默认值。使用java -XX:+PrintFlagsFinal查看参数默认值,也可以使用-sysprops选项把虚拟机进程的System.getProperties()的内容打印出来。

      jmap:Java内存映像工具

        jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。若不适用jmap命令,可以使用-XX:+HeapDumpOnOutOfMemoryError,让虚拟机在OOM异常出现后,自动生成dump文件。通过-XX:+HeapDumpOnCtrlBreak参数可以使用Ctrl+Break让虚拟机生成dump文件。在Linux下还可以通过使用Kill -3命令发送进程退出从而拿到dump文件。jmap还可以查询finalize执行队列,Java堆和永久代的详细信息。

        jmap命令格式 jmap [option] vmid

    option comment
    -dump 生成Java堆转储快照,格式为: -dump:[live, ]format=b, file=<filename>。其中live子参数说明是否只dump出存活的对象
    -finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalizer方法的对象。只在Linux/Solaris平台下有效
    -heap 显示Java堆详细信息,如使用哪种回收器,参数配置,分代状况等
    -histo 显示堆中对象统计信息,包括类,实力数量,合计容量
    -permstat 以ClassLoader为统计口径显示永久代内存状态
    -F 当虚拟机进程堆-dump选项没有响应时,可使用这个选项强制生成dump快照

      jhat 虚拟机堆转快照分析工具

        jhat与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。但在实际工作中,一般不会用jhat命令来分析dump文件。主要原因有二:一般不会部署在应用程序的服务器直接分析dump文件,即使可以,也会尽量将dump文件复制到其他机器上进行分析,因为分析是一个耗时且消耗硬件资源的过程;另一个原因是jhat的分析功能较简陋,一般会用VisualVM,或Memory Anaylzer以及HeapAnalyzer等。

      jstack Java堆栈跟踪器

        jstack(Stack Trace for Java)用于生成虚拟机当前时刻的线程快照,一般为threaddump或javacore文件。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如死锁,死循环等。

      命令格式 jstack [option] vmid

    option comment
    -F 当正常输出的请求不被响应时,强制输出线程堆栈
    -l 除堆栈外,显示关于锁的附加信息
    -m 若调用到本地方法时,可以显示C/C++的堆栈

      

      HSDIS:JIT生成代码反汇编

        HSDIS可以让HotSpot的-XX:+PrintAssembly指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量注释。

      VisualVM

        Visual VM可以做到:显示虚拟机进程以及进程的配置,环境信息(jps, jinfo);监视应用程序的CPU,GC,堆,方法区以及线程的信息(jstat, jstack);dump以及分析堆转储快照(jmap, jhat);方法级的程序运行性能分析,找出被调用最多,运行时间最长的方法;离线程序快照:手机程序的运行时配置,线程dump,内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。

        在Visual VM中生成dump文件有两种方式:在应用程序窗口中单击应用程序节点,然后选择堆dump;在应用程序窗口中双击应用程序节点以打开应用程序标签,然后再“监视”标签中单击“堆dump”。生成了dump文件之后,应用程序页签将在该堆的应用程序下增加一个以[heapdump]开头的子节点,并在主页签中打开了了该转储快照。

        在Profiler页签中,Visual VM提供了程序运行期间方法级的CPU执行时间分析以及内存分析,做Profiling分析会对程序运行性能有比较大影响。

  • 相关阅读:
    SpringMvc上手学习
    UITapGestureRecognizer 和 UICollectionView、UITableView的点击事件冲突问题
    Omnigraffle 许可证
    REACT-NATIVE
    iOS @property、@synthesize和@dynamic
    WWDC2018 之 优化 App Assets Optimizing App Assets
    WWDC2018 之 高性能 Auto Layout
    链表
    Your development team, "", does not support the Push Notifications capability.
    xcode无线调试
  • 原文地址:https://www.cnblogs.com/forerver-elf/p/8954413.html
Copyright © 2011-2022 走看看