JDK自带的检测虚拟机性能的工具

1. jps: 列出正在运行的虚拟机进程,并可以显示虚拟机的LVMID(对于本地来说,LVMID就是操作系统的进程ID,也就是PID)。也可以显示虚拟机执行的主类,如果进程是Jar包就显示时Jar包的路径
【JDK自带的检测虚拟机性能的工具】命令的格式:jps [ options ] [ hostid ]
其中[ options ] 是一些选项,常用的选项如下:
jps -q 只显示LVMID
jps -m 显示传递给主函数的参数
jps -l 主类全名,如果是jar则输出Jar包路径
jps -v 显示虚拟机启动时的JVM参数
执行的例子:

C:\Users\XXXX>jps -l 7144 C:\Users\wangshq\AppData\Local\Temp\pulBF1.tmp\PULSEI~1.JAR 17048 sun.tools.jps.Jps 30196 org.apache.catalina.startup.Bootstrap 29748 org.apache.catalina.startup.Bootstrap

这是我在我本地启动了两个Tomcat,执行jps -l 的例子
2. jstat: 用于监视虚拟机各种运行状态信息的命令工具。如:类装载,内存,垃圾收集,JIT编译等信息。
例子: jstat -gc 2764 250 20
这个代表在250毫秒内查询一次2764的垃圾收集情况,一共查20次。
3. jinfo: 用于实时的查看和调整虚拟机各项参数。
jinfo 可以使用 jinfo -flag来查看系统默认的值,也可以使用 jinfo -flag name=value 来修改虚拟机参数.
4. jmap:主要用于生产堆转储快照(dump文件)
其实不使用jmap命令也可以获取dump文件,在jvm参数上加上-XX:+HeapDumpOnOutOfMemoryError参数,在出现OOM异常的时候可以自动生成dump文件,还可以在Linux使用kill -3命令来生成dump快照文件
jmap命令不仅能得到dump文件,还有很多功能。例如它可以查询Java堆的详细信息,永久代的详细信息,使用的是哪种收集器,空间使用率是多少等等
具体的jmap命令的选项如下:
  • jmap -dump:live,format=b,file=,用来生成java堆转储快照
  • jmap - finalizerinfo 显示在F-Queue中等待的Finalizer线程执行finalize方法的对象
  • jmap - heap 显示java堆中详细信息,比如使用的是那种收集器,什么参数配置,分代状况等
  • jmap -histo 显示java堆中对象的统计信息,包括类、实例数量、合计容量
  • jmap -permstat 以ClassLoader为统计口径显示永久代的内存情况
  • jmap -F 当使用-dump没有反应的时候,就可以使用-F来强制生成dump快照
5. jhat:用来分析dump快照文件,内置了一个http服务器,可以在浏览器中查看。
但目前很少有人用jhat来分析dump文件,主要是因为它的分析功能很有限
6. jstack:java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照。
线程快照是当前虚拟机内每一条线程正在执行的方法堆栈的集合,用来分析和定位线程出现长时间停顿,如思索,死循环,饥饿等问题。
在Thread类中的getAllStackTraes()方法可以获得虚拟机中所有线程的StackTraceElement对象。我们可以使用这个方法来查看线程的堆栈情况

    推荐阅读