JVM之性能监控与故障处理工具

来源:互联网 发布:jsp页面显示数据库 编辑:程序博客网 时间:2024/05/17 13:09
                                              第四章   性能监控与故障处理工具
4.1   JDK命令行工具
  • jps (JVM Process Status Tool):虚拟机进程状况工具,可列出正在运行的虚拟机进程,并显示虚拟机主类(Main Class,main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier),对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID, Process Identifier)一致。jps可通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。
                 jps命令格式为:jps [options] [hostid]

          常用选项如下表:
  • jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具,用于监视虚拟机各种运行状态信息,可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,它是在没有GUI图形界面的服务器上运行期定位虚拟机性能问题的首选工具。
                jstat命令行格式:jstat [ option vmid [ interval [s | ms ] [ count ] ] ] 

         常用选项如下表:
     
          说明:命令行中VMID与LVMID在本地虚拟机进程中是一致的,若为远程虚拟机,则VMID的格式为:[protocol]:[//]vmid[@hostname][:port]/[servername],参数       
      interval和count代表查询间隔和次数,若省略,则查询一次,如每250ms查询一次进程2764垃圾收集情况,共查询20次,命令为:jstat -gc 2764 250 20
  • jinfo(Configuration Info for Java):Java配置信息工具,用于实时地查看和调整虚拟机的各项参数。jinfo的Option参数有:-flags(显示参数的系统默认值)、-sysprops(打印虚拟机进程的System.getProperties()的内容)。
               jinfo命令格式为:jinfo [ option ] pid
  • jmap(Memory Map for Java):Java内存映像工具,用于生成堆转储快照(一般称为heapdump或dump文件),也可使用-XX:+HeapDumpOnOutOfMemoryError参数在虚拟机出现OOM异常后自动生成dump文件,通过-XX:+HeapDumpOnCtrlBreak参数则可使用Ctrl+Break键让虚拟机生成dump文件。另外,jmap还可查询finalize执行队列、Java堆和永久代的详细信息,如空间利用率、当前使用的收集器类型等。
               jmap命令格式为:jmap [ option ] vmid

          option选项的值如下表:
  • jhat(JVM Heap Analysis Tool):虚拟机堆转储快照分析工具, 用于与jmap命令搭配来分析jmap生成的堆转储快照。jhat内置一个微型的HTTP/HTML服务器,生成dump文件后可用浏览器查看。如jhat test.bin,其中test.bin是用jmap命令生成的dump文件。
  • jstack(Stack Trace for Java):Java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件),其目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环等。
               jstack命令格式为:jstack [ option ] vmid

          option选项的值如下表:
      

4.2   JDK的可视化工具
  • JConsole(Java Monitoring and Management Console):Java监视与管理控制台,是一款基于JMX的可视化监视和管理工具。
            1 ) 启动JConsole:通过JDK/bin目录下的"jconsole.exe"启动,启动后将自动搜索出本机运行的所有虚拟机进程;
            2 ) 内存监控:"内存"标签相当于jstat命令,用于监视收集器管理的虚拟机内存(Java堆和永久代)的变化趋势,如下实例代码用于体验其监视功能:
          /**           * VM参数: -verbose:gc - Xms100M -Xmx100M           * -XX:+UseSerialGC           */          public class Test{           public static void main(String[] args) throws Throwable {                       fillHeap(10000);           }           static class OOMObject{              public byte [] object = new byte [1024];           }           public static void fillHeap (int num) throws Exception{            List<OOMObject> list = new ArrayList<OOMObject>(num);            for(int i = 0; i < num; i++){                   // 稍作延迟,使监视曲线变化更明显                  Thread. sleep(50);                  list.add( new OOMObject());            }             System. gc();           }         }
           3 ) 线程监控:相当于可视化的jstack命令,遇到线程停顿时可使用它进行监控分析;
  • VisualVM(All-in-one Java Troubleshooting Tool):多合一故障处理器,提供运行监视、故障处理、性能分析,它不需要被监视的程序基于特殊的Agent运行,对应用程序的实际性能影响很小,使得它可以直接应用在生产环境中。
 核心内容出处:《深入理解Java虚拟机:JVM高级特性与最佳实践》

0 0
原创粉丝点击