VisualVM是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使用的更多相关文章

  1. jvm系列(五):tomcat性能调优和性能监控(visualvm)

    tomcat服务器优化 1.JDK内存优化 根据服务器物理内容情况配置相关参数优化tomcat性能.当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃.因此一般建议堆的最 ...

  2. IDEA上安装和使用checkstyle,findbugs,visualVM,PMD插件

    ##安装插件步骤: 1.打开settings 2.选择plugins 3.点击"Browse repositories" 4.搜索对应内插件,点击"install&quo ...

  3. 使用visualvm远程监控JVM LINUX服务器配置方法

    (1)首先要修改JDK中JMX服务的配置文件,以获得相应的权限: 进入$JAVA_HOME所在的根目录的/jre/lib/management子目录下, a. 将jmxremote.password. ...

  4. 使用VisualVM检测

    下载 https://visualvm.github.io/ 检测远程服务器 转自:http://blog.csdn.net/yangkangtq/article/details/52277794 授 ...

  5. 使用VisualVM分析性能

    性能分析神器VisualVM VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量 ...

  6. 性能分析神器VisualVM

    VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回 ...

  7. 使用VisualVM进行性能分析及调优(转)

    VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回 ...

  8. Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试

    本文是本人前一段时间做一个简单Java监控工具调研总结,主要包括VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,以及对Java微基准测试的简单介绍, ...

  9. Java VisualVM使用:堆OOM

    背景 近期遇到了一个java.lang.OutOfMemoryError: Java heap space的问题,排除了堆设置过小的问题,代码走查没有头绪,所以使用VisualVM工具分析堆内存情况. ...

  10. 使用JDK自带的visualvm进行性能监测和调优

    使用JDK自带的visualvm进行性能监测和调优   1.关于VisualVm工具  VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的 J ...

随机推荐

  1. 获取对象State的方法

    一.通过Scaffold.of(context)可以获取父级最近的Scaffold Widget的State对象 二.通过GlobalKey来获取.步骤有两步: 给目标StatefulWidget添加 ...

  2. 推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:低秩矩阵分解(low rank matrix factorization)

    如上图中的predicted ratings矩阵可以分解成X与ΘT的乘积,这个叫做低秩矩阵分解. 我们先学习出product的特征参数向量,在实际应用中这些学习出来的参数向量可能比较难以理解,也很难可 ...

  3. Java中String对象的存储位置(学习笔记)

    首先,String是final修饰的.immutable对象,它以一个个字符的方式存储在字符数组中.其次,String类型创建对象有两种方式:①通过字面量赋值:会先去常量池中查找是否存在相同的字符串, ...

  4. luogu_2831: 愤怒的小鸟

    洛谷2831:愤怒的小鸟(状压\(dp\)) 题意: 在二维平面上给定\(n\)个点\((1\leq n\leq18)\). 其中每个点用\((x_i,y_i)\)表示\((0<x_i,y_i& ...

  5. Cronicle 基于nodejs 的分布式任务调度工具

    Cronicle 是一款不多的分布式任务调度工具,基于nodejs 开发,同时包含看web UI,从官方介绍看到的UI还是 挺不错的,而且功能很丰富,值得试用下 参考资料 http://cronicl ...

  6. [HNOI2016]序列 CDQ+DP

    [HNOI2016]序列 CDQ 链接 loj 思路 一个点最小变为l,最大变为r,不变的时候为v 那么j能在i前面就要满足. \(j<i\) \(r[j]<=v[i]\) \(v[j]& ...

  7. git 初始用法

    Git global setup git config --global user.name "xiaoming" git config --global user.email & ...

  8. 一种SpaceClaim抽取流道的方法——利用缺失的面功能

    针对不干净的几何,内部存在诸多碎面小缝隙,采用此方法可能会有较好的效果,不过需要耐心. 测试几何需要SpaceClaim19.0以上软件可以打开,下载链接: https://pan.baidu.com ...

  9. python 操作es

    Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索 ...

  10. <每日 1 OJ> -LeetCode 13 . 罗马数字转正数

    题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 ...