深入理解JVM------JVM性能监控工具

前言
  JDK本身提供了很多方便的JVM性能调优监控工具,除了jps、jstat、jinfo、jmap、jhat、jstack等小巧的工具,还有集成式的jvisualvm和jconsole。

1、jps

  jps(JVM Process Status Tool,虚拟机进程监控工具),这个命令可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称,以及这些进程的本地虚拟机唯一ID。这个ID被称为本地虚拟机唯一ID(local virtual Machine Identifier,简写为LVMID)。如果你在linux的一台服务器上使用jps得到的LVMID其实就是和ps 命令得到的PID是一样的。

语法格式如下:

jps [options] [hostid]

如果不指定hostid就默认为当前主机或服务器。
深入理解JVM------JVM性能监控工具_第1张图片
options参数选项说明如下:

-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数

例如:查看所有的java进程
深入理解JVM------JVM性能监控工具_第2张图片

2、jinfo

这个命令可以实时地查看和调整虚拟机各项参数。

主要参数如下:
深入理解JVM------JVM性能监控工具_第3张图片
例如:查看进程ID为12366的MaxPermSize大小可以用下面命令
这里写图片描述

3、jhat

  jhat(虚拟机堆转储快照分析工具),这个工具是用来分析jmap dump出来的文件。由于这个工具功能比较简陋,运行起来也比较耗时,所以这个工具不推荐使用,这里也不进行介绍了。

4、jmap

  jmap(Memory Map for Java,内存映像工具),用于生成堆转存的快照,一般是heapdump或者dump文件。如果不适用jmap命令,可以使用-XX:+HeapDumpOnOutOfMemoryError参数,当虚拟机发生内存溢出的时候可以产生快照。或者使用kill -3 pid也可以产生。jmap的作用并不仅仅是为了获取dump文件,它可以查询finalize执行队列,java堆和永久代的详细信息,如空间使用率,当前用的哪种收集器。

jmap的命令格式:

jmap [option] vmid

主要参数如下:
深入理解JVM------JVM性能监控工具_第4张图片
option参数说明:

-dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
-h | -help 打印辅助信息
-J 传递参数给jmap启动的jvm

例如:打印每个class的实例数目,内存占用,类全名信息
jmap -histo 12366
信息太长了,就贴最后几行了:
深入理解JVM------JVM性能监控工具_第5张图片

5、jstat

  jstat(JVM Statistics Monitoring Tool,虚拟机统计信息监视工具),这个命令用于监视虚拟机各种运行状态信息。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,虽然没有GUI图形界面,只是提供了纯文本控制台环境的服务器上,但它是运行期间定位虚拟机性能问题的首选工具。
语法格式如下:

jstat [option vmid [interval [s | ms] [count ] ] ]
深入理解JVM------JVM性能监控工具_第6张图片
说明:vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目,下面看看jstat工具的主要选项。
深入理解JVM------JVM性能监控工具_第7张图片
例如:需要每250毫秒查询一次进程12366 垃圾收集状况,一共查询10次
深入理解JVM------JVM性能监控工具_第8张图片

6、jstack

  jstack(Java Stack Trace,Java堆栈跟踪工具),这个命令用于查看虚拟机当前时刻的线程快照(一般是threaddump 或者 javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。生成线程快照的主要目的是定位线程出现长时间停顿的原因,入线程间死锁、死循环、请求外部资源导致的长时间等待都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情。

命令格式:
jstack [option] vmid
深入理解JVM------JVM性能监控工具_第9张图片
例如:查看进程12366的堆栈信息(大小限制,只截取部分)
深入理解JVM------JVM性能监控工具_第10张图片
结束语
  限于篇幅,集成式的jvisualvm和jconsole留在下一篇再和大家一起去讨论。

你可能感兴趣的:(jvm系列)