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. initState 必须调用 super.initState(); 否则报错

    @override void initState() { // initState 必须调用 super.initState(); 否则报错:info: This method overrides a ...

  2. 记一次PATH环境变量设置不生效的问题

    问题:卸载原有版本jdk后,如下图在/etc/profile中配置新的环境变量且source /etc/profile 生效配置后,JAVA_HOME值都正确,但PATH变量值还是不对 echo $P ...

  3. 欢迎访问阿里云Go Module代理仓库服务

    简介 go module公共代理仓库,代理并缓存go模块.你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建. 地址 https://mirrors.aliyun.com/g ...

  4. Python 弹出框代码

      from ctypes import * user32 = windll.LoadLibrary('user32.dll')#调用dll文件 #a是得到弹出框的选择按钮的值 user32.Mess ...

  5. Numpy | 13 位运算

    NumPy "bitwise_" 开头的函数是位运算函数.本章都是按二进制来操作的. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操 ...

  6. Linux 检测 tls

    检测 tls # openssl s_client -connect intl.jdair.net: -tls1

  7. Http、Socket、WebSocket之间联系与区别

    WebSocket和Socket区别 可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系. HTTP 协议有一个缺陷:通信只 ...

  8. [Gamma阶段]第十次Scrum Meeting

    Scrum Meeting博客目录 [Gamma阶段]第十次Scrum Meeting 基本信息 名称 时间 地点 时长 第十次Scrum Meeting 19/06/06 大运村寝室6楼 30min ...

  9. Flask纪要

    flask学习过程 1框架基础 2redis高性能key-value数据库 3视图具有装饰器的路由函数 4模板html文件 面向对象操作数据库orm 5蓝图 6单元测试 7GitHub 8项目 学习的 ...

  10. 各种字符串Hash函数(转)

    /// @brief BKDR Hash Function /// @detail 本 算法由于在Brian Kernighan与Dennis Ritchie的<The C Programmin ...