VisualVM使用

Posted baby123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VisualVM使用相关的知识,希望对你有一定的参考价值。

sualVM是JDK自带的一个用于Java程序性能分析的工具

在JDK安装目录的bin文件夹下名称为 jvisualvm.exe

技术图片

 在左侧选择应用

(1)概述

 应用程序和运行时环境的基本信息

技术图片

基本参数

PID:应用程序的进程ID
主机:应用程序运行的系统地址
主类:运行了main方法的类
参数:应用启动时所传递的参数信息
JVM:当前的JVM信息
Java:当前使用的JDK信息
Java Home:JDK的位置
JVM标志:启动JDK时JVM使用的的标志
出现OOME时生产堆dump:当前出现OOME时生产堆dump功能的开启/禁用状态

保存的数据

  显示VisualVM存储的当前应用程序的信息

详细信息

  JVM参数:配置的JVM启动的参数信息

  系统属性 :JVM运行的系统属性

(2)监视

  展示监听的当前应用程序的整体情况

技术图片

 CPU:CPU的使用百分比

内存:内存的占用情况,包括内存大小、最大值和已经使用的大小

  堆:堆内存的大小和堆内存使用情况

  Metaspace:元空间内存的使用情况

类:显示了已经加载的类数量和共享类的数量

线程:显示了应用程序在JVM中生存和守护线程的数量

堆dump:执行堆dump,在新的标签页打开,查看dump的详细信息

技术图片

(3)线程

展示了应用程序的线程数据,包括所有线程数、活动线程数、完成线程数

技术图片

 线程dump:执行线程dump,在新标签页打开结果

技术图片

(4)抽样器

  抽取CPU和内存的样例数据

  设置——设置抽样参数

   CPU抽样:

    CPU样例:展示了方法级别CPU性能(执行的时间及占比)
    线程CPU时间:反映了线程执行占用cpu的时间和占比

技术图片

技术图片

   内存抽样

    堆柱状图:展示了内存占用情况

    每个线程分配:展示了每个线程分配的内存以及占比

技术图片

 技术图片

(5)Profile

  启动和停止本地应用程序的概要分析会话

   CPU:点CPU按钮,启动一个 CPU性能分析会话 ,显示 CPU 的使用率、方法的执行效率和频率等相关数据

技术图片

   内存:点击“内存”按钮将启动一个内存分析会话,等 VisualVM 收集和统计完相关性能数据信息,将会显示在性能分析结果

 技术图片

 (6)Visual GC

安装插件

工具——》插件

技术图片

 就会出现Visual CG 的标签

技术图片

   Spaces:分为 Perm(Permanent Generation) 永久代,  Old 老年代和新生代

     A.永久代

      通过VM Args设置,eg:

        -XX:PermSize=1024m   (初始值

        -XX:MaxPermSize=1024m (最大值

    B.java堆(java heap)——Old 老年代+新生代

      通过VM Args设置,eg:

        -xms2048m (初始堆内存

        -Xmx2048m (最大堆内存

        -XX:+HeapDumpOnOutofMemoryError (内存异常打印dump

        -Xmn800m  (新生代内存

        -XX:SurvivorRatio=8 (新生代内存分配比例(8:1:1)

        因为Heap分为新生代跟老年代,所以2018M-800M=1218M,老年代就是1218M(初始内存跟最大内存最好相等,防止内存不够时扩充内存或者Full GC,导致性能降低)

      新生代:Eden 区+S0 survivor 区+S1 survivor 区,默认是8:1分配内存

   Graphs:以时间为横坐标的状态面板

    Compile Time:编译时间表示虚拟机的 JIT 编译器编译热点代码的耗时

    Class Loader Time: class 的 load 和 unload 时间

    GC Time:

技术图片

       18 collections ——自监视以来共 22 次GC, 包括 Minor GC 和 Full GC

      456.653ms 表示 gc 共花费了456.653ms      Last Cause: Allocation Failure 上次发生 gc 的原因为内存分配失败

    Eden Space:

技术图片

       Eden Space (1.328G,204.000M): 128.430M——Eden Space 最大可分配空间  340.500M,当前分配空间 185.000M,当前占用空间 91.012M

      14 collections, 153.307ms——当前新生代发生 GC 的次数为14次, 共占用时间 153.307ms

    Survivor 0,Survivor 1:

技术图片

     S0 和 S1 有一个是空闲的,这样方便执行 minor GC,他们的最大分配空间是相同的,在 minor GC 时,S0 和S1 会互相切换

     Survivor 1 (453.500M, 33.500M) : 3.814M——S1 最大分配空间 453.500M, 当前分配空间33.500M, 已占用空间3.814M

    Old Gen:

技术图片

Old Gen (2.659G, 370.000M) :50.940M—— OldGen最大分配空间2.659G, 当前空间370.000M, 已占用空间50.940M

4 collections, 306.346ms ——老年代发生了 4次 GC, 耗费了306.346ms的时间

老年代 GC 也叫做 Full GC, 在老年代 GC 时会伴随着 Minor GC

    Metaspace:

技术图片

     Perm Gen (1.096G, 109.375M) : 106.630M——最大可用空间1.096G,当前永久代空间109.375M,已占用空间106.630M

注:

  如果显示指定-XX:+UseParallelGC --新生代并行、老年代串行收集器 ,histogram柱状图会不支持当前收集器

 

以上是关于VisualVM使用的主要内容,如果未能解决你的问题,请参考以下文章

VisualVM、Scala 和 Ubuntu?

使用 VisualVM 分析 Tomcat 应用程序

使用 VisualVM 分析 tomcat 应用程序

为啥 VisualVM 为 VisualVM 本身运行 50 个线程?

Java虚拟机性能管理神器 - VisualVM 入门

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段