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平台下有效。
使用示例: