Java虚拟机常用的性能监控工具

2020-10-10 17:25:07 浏览数 (1)

jps(虚拟机进程状况工具)

jps(JVM Process Status Tool)是JDK中的一个小工具,它的功能和UNIX的ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier),LVMID和操作系统的进程ID是一致的,当同时启动多个虚拟机进程,无法根据进程名称进行定位时,就可以使用jps命令显示主类的功能来区分。

jps命令格式:

jps [options] [hostid]

jps使用示例:

jps还可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,参数hostid为RMI注册表中注册的主机名,jps的其他常用选项如下:

-q 只输出LVMID,省略主类的名称

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

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

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

jstat(虚拟机统计信息监视工具)

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机进程中的类加载、内存、垃圾收集、即时编译器等运行时数据,由于服务器一般都是没有GUI界面的,因此可以使用此工具定位性能问题。

jstat命令格式为:

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

对于命令格式中的VMID需要注意的是:如果是本地虚拟机进程,VMID就是LVMID,对于远程虚拟机进程,那么VMID的格式就是:

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

参数interval和count代表查询间隔和查询次数,如果省略了,则表示只查询一次。假设每2000毫秒查询进程16656新生代垃圾收集情况,一共查询10次,则命令应当是:

jstat -gcnew 16656 2000 10

查询示例:

选项option表示用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况,主要有如下选项:

-class 监视类加载、卸载数量、总空间以及类装载所耗费的时间

-gc 监视Java堆状况,包括Eden区、2个Survivor区、老年代、元空间等的容量,已用空间,垃圾收集时间合计等信息

-gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间

-gcutil 监视内容与-gc基本相同,但输出主要关注一使用空间占总空间的百分比

-gccause 与-gcutil功能一样,但是会额外输出导致上一次垃圾收集产生的原因

-gcnew 监视新生代垃圾收集情况

-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间

-gcold 监视老年代垃圾收集情况

-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间

-gcmetacapacity 输出原空间使用到的最大、最小空间

-compiler 输出即时编译器编译过的方法、耗时等信息

-printcompilation 输出已经被即时编译的方法

jmap(Java内存映像工具)

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。如果不使用jmap命令,也可以在启动虚拟机时添加-XX:HeapDumpOnOutOfMemoryError参数,当虚拟机发生内存溢出异常之后就会自动生成堆转储快照文件;通过添加-XX:HeapDumpOnCtrlBreak参数,可以使用[Ctrl] [Break]键让虚拟机生成堆转储快照文件。此外,在Linux系统下,通过发送kill -3命令发送进程退出信号“恐吓”一下虚拟机,也能拿到堆转储快照。

jmap命令不仅能获取堆转储快照,还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前使用到时哪种垃圾收集器等。在Windows下,仅-dump和-histo选项可以使用,其余的在Linux/Solaris平台下才有效。

jmap的命令格式:

jmap [option] vmid

option选项的合法值和含义如下:

-dump 生成Java堆转储快照。格式为-dump:[live,]format=b,file=<filename>,其中live子参数说明是否只dump出存活的对象

-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效。

-heap 显示Java堆详细信息,如使用哪种垃圾收集器、参数配置、分代状况等。只在Linux/Solaris平台下有效。

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

-permstat 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效。

-F 当虚拟机进程堆-dump选项没有响应时,可使用这个选项强制生成dump快照。只在Linux/Solaris平台下有效。

使用示例:

0 人点赞