虚拟机性能监控与JDK可视化工具

JDK命令行工具

jps(JVM Proccess Status Tool)

  • 显示指定系统内所有HotSpot虚拟机进程
  • 参数
    • -q 只输出LVMID(Local Virtual Machine Identifier),省略主类名
    • -m 输出虚拟机进程启动时传递给主类main()函数的参数
    • -l 输出全路径名,如果是jar则输出jar的全路径
    • -v 输出虚拟机进程启动时JVM参数

      jstat(JVM Statistics Monitoring Tool)

  • 收集HotSpot虚拟机各方面的运行数据
  • 命令格式:

    1
    jstat [option vmid [interval[s|ms] [count]]
    • option:用户想要查询的虚拟机信息
      • -class 监视类装载、卸载数量、总空间及类装载耗时
      • -gc 监控Java堆状况,包括eden、survivor、老年代、永久代等容量、已用空间、GC时间合计等信息
      • -gccapacity 与-gc差不多,但输出主要关注Java堆各个区域使用到的最大、最小空间
      • -gcutil 与-gc差不多,但输出主要关注已使用空间占总空间的百分比
      • -gccause 与-gcutil一样,但是会多输出导致上次GC的原因
      • -gcnew 监视新生代GC状况
      • -gcnewcapacity 与-gcnew差不多,但输出主要关注使用到的最大、最小空间
      • -gcold 监视老年代GC装快
      • -gcoldcapacity 与-gcold差不多,但输出主要关注使用到的最大、最小空间
      • -gcpermcapacity 输出永久代使用到的最大、最小空间
      • -compiler 输出JIT编译过的方法、耗时等信息
      • -printcompilation 输出已经被JIT编译的方法
    • VMID和LVMID的区别:如果是本地则两个一样;如果是远程虚拟机,则VMID为:

      1
      [protocol:][//lvmid[@hostname[:port]/servername]
    • 例:假如每250ms查询一次进程2764的垃圾收集情况,一共查询20次,命令为:

      1
      jstat -gc 2764 250 20

jinfo(Configuration Info for Java)

  • 显示虚拟机配置信息
  • 格式
    1
    jinfo [option] pid

jmap(Memory Map for Java)

  • 生成虚拟机的内存存储快照(heapdump文件)
  • 命令格式

    1
    jmap [option] pid
  • option参数

    • -dump 生成Java堆转储快照,格式为:-dump:[live,]format=b,file=,其中live子参数说明是否只dump出存活的对象
    • -finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法,只在linux/Solaris平台下有效
    • -heap 显示Java堆详细信息,只在linux/Solaris平台下有效
    • -histo 显示堆中对象统计信息, 包括类、实例数量、合计容量
    • -permstat 以ClassLoader为统计口径显示永久代内存状态。只在linux/Solaris平台下有效
    • -F 当虚拟机进程对-dump选项没有响应时,可以使用这个强制生成。只在linux/Solaris平台下有效

      jhat(JVM Heap Dump Browser)

  • 用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以再浏览器上查看分析结果(耗时长,不推荐使用)

    jstack(Stack Trace for Java)

  • 显示虚拟机线程快照
  • 命令格式

    1
    jstack [option] vmid
  • option 参数:

    • -F 当正常输出的请求不被响应时,强制输出线程堆栈
    • -l 除堆栈外,显示关于锁的附加信息
    • -m 如果调用到本地方法,可显示C/C++的堆栈

      HSDIS:JIT生成代码反汇编

      JDK可视化工具

      JConsole

      VisualVM