JVM-7.JVM 性能监控 jdk命令

2019-05-29 20:33:15 浏览数 (1)

JVM-7.JVM 性能监控 jdk命令

常见监控和故障处理工具

名称

描述

jps

JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程

jstat

JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据

jinfo

Configuration Info for Java,显示虚拟机配置信息

jmap

Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件)

jhat

JVM Heap Dump Browser,用于分析heapdump文件,建立一个http/html服务器,让用户在浏览器上查看分析结果

jstack

Stack Trace forJava,显示虚拟机的线程快照

1. jps,虚拟机进程状况工具

列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class)名称,一级这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)。 命令格式:

代码语言:javascript复制
jps [ options ] [ hostid ]

选项:

选项

作用

-q

输出LVMID,省略主类的名称

-m

输出虚拟机进程启动时传给主类main()函数的参数

-l

输出主类的全名,如果进程执行的是jar包,输出Jar路径

-v

输出虚拟机启动时的JVM参数

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

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

代码语言:javascript复制
jstat [ option vmid [internval] [s | ms] [count]] ]

如果是本地虚拟机VMID和LVMID一直,如果是远程虚拟机,VMID格式为:

代码语言:javascript复制
[protocol: ] [//] vmid [@hostname[:port]/servername]

参数interval和count标识查询间隔和次数,如果省略说明只查询一次。 下例每隔250毫秒查询一次进程2764的GC情况,查询20次。

代码语言:javascript复制
jstat -gc 2764 250 20

选项主要分三类:类装载,垃圾收集,运行编译情况:

选项

作用

-class

监视类装载,卸载数量,总空间,以及类装载所耗费的时间

-gc

监视Java堆情况,包括Eden区,两个Survivor区,老年代,永久带等的容量,已用空间,GC时间合计等

-gccapacity

监视内容与-gc一致,但输出主要关注Java堆各个区域使用达到的最大,最小空间

-gcutil

监视内容与-gc一致,单输出主要关注已使用空间占总空间的百分比

-gccause

与-gcutil功能一样,但是额外输出导致上一次GC产生的原因

-gcnew

监视新生代GC状况

-gcnewcapacity

和-gcnew基本相同,但主要关注使用的最大,最小空间

-gcold

监视老年代GC状况

-gcoldcapacity

监视内容和-gcold相同,主要关注使用的最大,最小空间

-gcpermcapacity

输出永久带使用的最大最小空间(jdk1.8测试没有该选项)

-compiler

输出JIT编译器编译过的方法,耗时等信息

-printcompilation

输出已经被JIT编译过的方法

3. jinfo:Java配置信息工具

实时查看和调整虚拟机的各项参数。 命令格式:

代码语言:javascript复制
jinfo [ option ] pid

macOS 10.14.1 jdk1.8.0这个命令好像有bug,会SIGKILL掉进程

4.jmap:Java内存映像工具

用于生成堆存储快照(heapdump)。 还可以查询finalize执行队列,Java堆和永久代的详细信息。 *除了jmap命令,获取Java对存储快照还可以有以下方法:

  • -XX: HeapDumpOnOutOfMemoryError参数,使虚拟机在OOM异常出现之后自动生成dump文件
  • -XX: HeapDumpOnCtrlBeak参数,ctrl break键可以使虚拟机生成dump文件
  • kill -3命令:进程退出信号,也能拿到dump文件 命令格式:
代码语言:javascript复制
jmap [ option ] vmid

选项:

选项

描述

-dump

生成Java堆转存快照,格式为:-dump:[live, ] format=b,file=<filename>,其中live参数标识只dump出存活的对象

-finalizerinfo

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

-heap

显示Java 堆相信信息,如使用哪种回收器,参数配置,分代状况

-histo

显示堆中对象统计信息,包括类,实例数量,合计容量

-permstat

以ClassLoader为统计口径显示永久代内存状态

-F

在虚拟机对-dump选项无响应时,强制生成dumo快照

macOS 10.14.1 jdk1.8.0这个命令异常,会SIGKILL掉进程

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

用来和jmap搭配使用,分析jmap生成的heapdump文件。 内置了一个http/html服务器,生成dump文件的分析结果,在浏览器中查看。 没有Visual VM强大。

6. jstack:Java堆栈跟踪工具

用于生成虚拟机当前时刻的线程快照(一般叫做threaddump或javacore文件)。 线程快照就是虚拟机内每一条线程正在执行的方法堆栈的集合。 格式:

代码语言:javascript复制
jstack [ option ] vmid

选项:

选项

作用

-F

当正常请求不被响应时,强制输出线程堆栈

-l

除堆栈外,显示关于锁的附加信息

-m

如果调用本地方法,显示C/C 堆栈

7. HSDIS:JIT生成代码反汇编

让HotSpot的-XX: PrintAssembly指令调用它来吧动态的代码还原为汇编代码输出,同时伴随大量高价值注释。

0 人点赞