JDK命令行工具之常用JVM性能监控与故障处理工具

在JDK中使用的java、javac命令都是JDK_HOME/bin目录下的命令行程序,除此之外,bin目录下还包含用于监控JVM和故障处理的工具,它们功能强大,能在处理应用程序性能问题、定位故障时发挥很大的作用。

1. jps:虚拟机进程状态工具

  1. jps全称:JVM Process Status Tool
  2. jps用途:用于显示系统内所有的HotSpot虚拟机进程,它可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main方法所在的类)的名称以及这些进程的本地虚拟机唯一ID。
  3. 其他的JDL工具大多需要通过jps工具查询到本地虚拟机唯一ID后来确定要监控的是哪一个虚拟机进程。
  4. jps命令格式:jps 【options】 【hostid】
    options有如下几个选项:
    -q:只输出本地虚拟机唯一ID,省略主类的名称
    -m:输出虚拟机进程启动时传递给主类的参数
    -l:输出主类的全名,如果进程执行的是jar,输出jar路径
    -v:输出虚拟机进程启动时JVM参数
    hostid可用于查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名

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

  1. jstat全称:JVM Statistics Monitoring Tool
  2. jstat工具的用途:用于监控虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机中的类装载、内存、垃圾收集、JIT编译等运行数据。
  3. jstat命令格式:jstat 【option vmid 【interval count】】
    (1)option选项代表用户希望查询的虚拟机信息,主要分为三类:类装载、垃圾收集、运行期编译等状况。下面介绍常用的option选项:
    -class:监视类装载、卸载数量、总空间以及转载类所耗费时间
    -gc:监视Java堆状况,包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
    -gcutil:与-gc作用一样,监视Java堆状况,但输出的是已使用空间占总空间的百分比
    -gcnew:监视新生代GC状况
    -gcold:监视老年代GC状况
    (2)参数vmid:如果是本地虚拟机进程vnid则与jps输出的本地虚拟机进程id一致;如果是远程虚拟机进程,那么vmid的格式为【protocol://vmid@hostname :port/servername】
    (3)参数interval:表示查询间隔时间
    (4)参数count:表示查询次数
    注:没有interval和count这两个参数表示只查询一次

3. jinfo:Java配置信息工具

  1. jinfo全称:Configuration Info for Java
  2. jinfo工具的用途:用于查看和调整虚拟机的配置参数
  3. jinfo的命令格式:jinfo 【option】 pid
  4. 执行 jinfo -flags pid 命令后查询结果中,Non-default VM flags为虚拟机默认的设置参数,Command line为用户自行设置的参数

4. jmap:Java内存映像工具

  1. jmap全称:Memory Map for Java
  2. jmap工具的用途:用于生成堆转储快照(一般称为heapdump或dump文件),jmap不仅仅为了获取dump文件,它还可以查询finalize执行队列、Java堆、永久代的详细信息,如空间使用率、当前使用的是那种收集器等
  3. jmap的命令格式:jmap 【option】 vmid
    option选项有如下几个:
    (1)-heap:显示JVM堆的详细信息
    (2)-histo:显示JVM堆中的对象的统计信息,包括类、实例数量、合计容量
    (3)-dump:生成Java堆转储快照,格式为-dump:[live],format=b,file=filename,其中live参数说明是否只dump出存活的对象

5. jhat:虚拟机转储快照分析工具

1.jhat全称:JVM Heap Analysis Tool
2.jhat工具的用途:jhat与jmap搭配使用,用于分析jmap生成的堆转储快照。jhat
内置了一个微型的HTTP/HTML服务器,生成的dump文件的分析结果后,可以在浏览器中输入“http://localhost:7000”进行查看。
3.jhat命令格式:jhat dump文件

6. jstack:Java堆栈跟踪工具

  1. jstack全称:JVM Stack Trance
  2. jstack工具的用途:用于生成虚拟机当前时刻的线程快照。
    (1)线程快照是指当前虚拟机内的每一个线程正在执行的方法堆栈的集合。
    (2)生成线程快照的作用是可用于定位线程出现长时间停顿的原因,如线程间死锁 、死循环、请求外部资源导致的长时间等待等等问题,当线程出现停顿现象时,就可以用jstack查看各个线程调用的堆栈情况。
  3. jstack的命令格式:jstack 【option】 vmid
    option选项有如下几个:
    (1)-F:当正常输出的请求不被响应时,强制输出线程堆栈
    (2)-l:除堆栈外,显示关于所的附加信息
    (3)-m:如果调用到扥地方法的话,可以显示C/C++的堆栈

你可能感兴趣的:(Java)