虚拟机性能监控命令

本文是《深入理解java虚拟机》第四章 “虚拟机性能监控与故障处理工具” 笔记。

一 jdk 命令行工具

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

        jps options hostid ]

          hostid机器需要启动jstatd 否则报错RMI Registry not available;

                -q    //输出LVMID(本地虚拟机进程pid)省略主类的名称

                -m  //输出虚拟机进程启动时传递给主类main()方法的参数;

                -l    //输出主类的全名,如果进程执行的是jar,输出jar路径;

                -v    //输出虚拟机进程启动时的jvm参数

                    

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

        jstat [option vmid [interval [s|ms] [count]]]

        option--操作;

        vmid--本地虚拟机进程,则vmid和lvmid相同都是pid,当是远程虚拟机进程,则为

                    [protocol:] [//] lvmid [@hostname[:port]]/servername

        interval--查询间隔;

        count--查询次数(如果没有interval和count, 则只查询一次)

                -class    // 监视类加载、卸载数量、总空间一级类加载所耗费的时间;

                

                -gc    //监视java堆状况、包括Eden,Survivor,老年代,永久代的容量、已用空间、GC时间合计等信息;

                

                -gccapacity        //类似gc,输出内容主要关注java堆各个区域使用的最大、最小空间;

                -gcutil    //    类似gc,输出主要关注已使用空间占总空间的百分比;

                -gccause    //    类似gcutil,但是会输出导致上一次GC产生的原因

                -gcnew    //    监视新生代GC情况

                -gcold    // 监视老年代GC状况

                -gcnewcapacity    //    类似gcnew 输出主要关注使用到的最大最小空间

                -gcoldcapacity

                -gcpermcapacity    //永久代使用到的最大最小空间

                -compiler    //输出JIT编译器编译过的方法,耗时等

                -printcompilation    //输出已经被JIT编译的方法

    3 jinfo:java虚拟机配置信息工具(jps可以查询启动设置的参数,但不包括默认的参数)

            jinfo [option] pid

                -sysprops    //    打印System.getProperties()

                -flag    // 输出 flag后面参数的值 eg: jinfo -flag SurvivorRatio 4760

                                jdk1.6以上也可以使用java -XX:+PrintFlagsFinal查看参数默认值

      4 jmap: java内存映像工具,可以获取dump文件,还可以查询finalize执行队列、java堆和永久代详细信息,空间使用率

                    或者当前使用的收集器等;

         其中,dump文件也可以通过以下方法获取

                (1) -XX:+HeapDumpOnOutOfMemoryError  //在OOM异常时自动生成dump文件;

                (2) -XX:+HeapDumpOnCtrlBreak  //可使用ctrl+break键生成dump文件;

                (3) linux下使用kill -3命令发送进程退出信号,生成dump文件;

        jmap [option]  vmid

            -dump    //生成java堆转储快照

            -finalizerinfo    //显示在F-Queue中等待Finalizer线程执行finalize方法的对象

            -heap    //显示java堆详细信息

            -histo    //显示堆中对象统计信息,包括类,实例数量,合计容量 windows可用

            -permstat    //以ClassLoader为统计口径显示永久代内存状态,仅linux/solaris可用

            -F    //当虚拟机进程对-dump无响应时,强制生成dump,仅linux/solaris可用

            

    5 jhat:虚拟机堆转储快照分析工具 配合jmap分析jmap生成的堆转储快照,但功能比较简陋,且服务器内存消耗大,一般

              将dump文件复制出来到其他机器上分析,使用更专业的VisualVM/Eclipse Memory Analyzer等工具;

    6 jstack:java堆栈跟踪工具,用来生成虚拟机当前时刻的线程快照(称为threaddump或者javacore文件)

                 目的:定位线程出现长时间停顿的原因(线程间死锁、死循环、请求外部资源时间过长等)

            jstack [option] vmid

                -F //当正常输出的请求不被响应时,强制输出threaddump

                -l  //除堆栈外显示关于锁的附加信息

                -m //如果调用到native方法,可以显示c/c++堆栈

            扩展:jdk1.5后java.lang.Thread类新增getAllStackTraces()获取虚拟机所有线程的stackTraceElement对象,可以替换

                      实际项目可以使用它做个管理员页面,可以随时使用浏览器查看线程堆栈;

        

    7 HSDIS: JIT生成代码反编译

            使用方法

二 jdk可视化工具

    1 JConsole:java监视与管理控制台

        启动:jconsole.exe

        

2 VisualVM:多合一故障处理工具

   优点:功能强大,运行监控和故障处理、性能分析合一,对实际程序实际性能影响很小,可以直接在生产环境上使用;

   基于NetBeans平台开发,所以具备插件扩展特性;

   扩展后功能包括:

        (1)显示虚拟机进程以及进程配置、环境信息;

        (2) 监视应用程序CPU、GC、堆、方法区及线程信息;

        (3) dump以及分析堆转储快照;

        (4) 方法级别的程序运行性能分析,找出被调用最多、运行时间最长的方法;

        (5) 离线程序快照:收集程序运行时的配置、线程dump、内存dump等建立快照,将快照发送给开发者进行bug反馈;

        (6) 无限可能。。。

     启动方法:jvisualvm.exe

      在线或手动安装插件

        

        profiler:性能分析,但是占用资源,一般不在生产环境使用;

        BTrace:在不停止目标程序的情况下,动态加入原本不存在的调试代码,对生产环境问题定位有很大的作用;

            

            

                

猜你喜欢

转载自blog.csdn.net/xlnhaha/article/details/79824403