VisualVM介绍使用
1 打开VisualVM(这个工具放在JDK安装目录的bin目录下,双击jvisualvm.exe即可打开),如下图所示
以VisualVM自身为例,VisualVM本身也是一个java程序,当然也而已用VisualVM来分析
2 概述页面主要显示程序的启动参数和系统信息(如下图所示)
- PID -- 程序启动后的进程号,在命令行中可以用 jps命令查看
- 主机 -- 如果是本机的话显示,localhost,如果是远程主机应该是显示远程主机的主机名或者IP
- 主类 -- 程序入口类(main方法所在的类)
- 参数 -- VisualVm 启动的时候使用的一些配置文件路径
- JVM -- jvm类型
- Java -- jdk的版本信息
- Java Home -- JDK安装目录
- JVM参数 -- VisualVm 启动时候设置的JVM参数
- 系统属性 -- java环境的系统参数
3 监视页面主要展示 系统资源占用情况(如下图所示)
- CPU -- 展示java程序运行的时候占用的cpu资源 如下图中橙色的表示程序运行使用的cpu资源百分比,蓝色部分表示垃圾回收占用CPU资源百分比
- 堆 -- 这里要说明下堆内存的组成部分,堆是由老年代和新生代组成,其中新生代有由"伊甸园"和"两个幸存区组成"三部分组成,堆视图看到的资源占用实际是"老年代"、"伊甸园(Eden)"、"两个幸存者(Survivor )"的一个综合情况。
- PermGen -- Perm 区用来存放java类以及其他虚拟机自己的静态数据,(常被称为持久代或者方法区)
- 类 -- 此视图 主要展示 当前程序加载了多少个类
- 线程 -- 当前程序的线程启动情况
- 执行垃圾回收 -- 手动触发一次GC 相当于在程序代码中调用(System.gc()),如果是远程连接到生产环境中请慎重点击。
- 堆Dump -- 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。(可以查看当前程序内存中的所有对象)
4 线程页面(主要展示程序中所有的线程运行状态)
- 线程dump – 此按钮主要生产当前程序中所有线程的快照(对分析线程死锁,比较有帮助)
- 时间线 – 展示每个线程的实时运行状态(不同颜色代表不同的状态)
- 表 – 按照二维表格的形式展示每个线程不同状态的时间统计信息
- 详细信息 – 用饼图展示每个线程的运行状态
5 抽样器(应该算是线程页面功能的一个补充)
CPU-> CPU样例 – 主要展示方法消耗的CPU资源比例和时间
CPU->线程CPU时间 – 主要展示线程消耗的CPU资源信息
内存-> 堆柱状图 – 展示堆内存中各种对象占用的字节数和总实例数
内存->PermGen – 展示方法区各种对象消耗的内存情况
内存-> 每个线程分配—展示不同线程占用内存的情况
6 增加VisualGC插件
Java VisualVM默认没有安装Visual GC插件,需要手动安装,JDK的安装目录的bin目露下双击jvisualvm.exe,即可打开Java VisualVM,点击菜单栏 工具->插件 安装Visual GC
安装完成后重启Java VisualVM,Visual GC界面自动打开,即可看到JVM中堆内存的分代情况
被监控的程序运行一段时间后Visual GC显示如下
要看懂上面的图必须理解Java虚拟机的一些基本概念:
堆(Heap) :JVM管理的内存叫堆
分代:根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,扬长避短也。
Young(年轻代)
年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor复制过来的对象。而且,Survivor区总有一个是空的。Tenured(年老代)
年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。Perm(持久代)
用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。
GC的基本概念
gc分为full gc 跟 minor gc,当每一块区满的时候都会引发gc。
Scavenge GC
一般情况下,当新对象生成,并且在Eden申请空间失败时,就触发了Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。Full GC
对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:
上一次GC之后Heap的各域分配策略动态变化
System.gc()被显示调用
Perm域被写满
Tenured被写满
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。其实说白了就是该内存空间使用完毕之后未回收。
转载于:https://www.cnblogs.com/lizhen-home/p/7727536.html
VisualVM介绍使用相关推荐
- java基础工具VisualVM介绍与详细使用
1.美图 2.介绍 官网 : http://visualvm.github.io/ VisualVM是JDK自带的一个用于Java程序性能分析的工具 VisualVM 是一个工具,它提供了一个可视界面 ...
- java visualvm远程监控_深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...
- visualVM 介绍 (一)
VisualVM 入门指南 一.在JDK安装bin文件夹下面,点击"jvisualvm.exe",弹出下面的页面: 二.首次启动VisualVM后,先不着急找应用程序进行检测,需要 ...
- jdk工具之JvisualVM、JvisualVM之一--(visualVM介绍及性能分析示例)
转载:https://www.cnblogs.com/duanxz/p/3713773.html 1.1 Visual VM简介 VisualVM 提供在 Java 虚拟机 (Java Virutal ...
- java visualvm 官方_Java VisualVM使用
Java VisualVM Java VisualVM介绍 Java VisualVM is a tool that provides a visual interface for viewing d ...
- jconsole介绍
文章来源:https://blog.csdn.net/qq_31156277/article/details/80035430 @JConsole介绍 1.1 JConsole描述 Jconsole ...
- Java Heap堆分析
一.堆直方图 减少内存使用时一个重要目标,在堆分析上最简单的方法是利用堆直方图.通过堆直方图我们可以快速看到应用内的对象数目,同时不需要进行完整的堆转储(因为堆转储需要一段时间来分析,而且会消耗大量磁 ...
- 【java】visualvm 插件 visual gc 使用介绍
1.概述 转载:visualvm 插件 visual gc 使用介绍 visual gc 是 visualvm 中的图形化查看 gc 状况的插件. 具体详细介绍可参照: http://www.orac ...
- 【java】IDEA安装VisualVM插件-使用介绍 检测死锁 内存 cpu 慢方法
文章目录 1.美图 2.概述 3.安装 4.查看程序的JVM内存 5.查看程序的线程情况 6.VisualGC 7. CPU分析篇 M.参考 1.美图 2.概述 3.安装 File-> Sett ...
最新文章
- NOIP2012-摆花
- Django学习笔记(5)---ForeignKey
- linux硬件控制流,Linux系统学习笔记:异常控制流
- 数据结构 - 二元查找树
- JavaScript原理学习
- Name Error Connection “:1.33“ is not allowed to own the service “x“ due to security policies in the
- java rsync上传_Rsync自动同步工具
- 抓linux肉鸡教程视频,抓肉鸡的教程和软件免费分享(2018一天抓1000只电脑肉鸡视频)...
- python解析JSON数据
- PRINCE2与PMP含金量对比
- 微信:一个必须研究的产品
- win10配置ffmpeg环境
- java holder详解,Java基础系列18:Holder技术的实现原理分析
- 商业智能BI全解,一文让你明白才是商业智能(BI)
- 134_人人后台管理系统-立即执行定时任务失败(坑)
- 北大才子吴明辉3万5千字的深度分享告诉你:能成功创立秒针跟明略的连环创业者是有秘籍的
- goahead(嵌入式) webservice (3.3.0)运行goforms
- HC-SR04超声波测距模块的高精度使用方法
- canvas实现黑客帝国效果
- 基于C++的Huffman赫夫曼编译码器开发 课程论文+项目源码及可执行exe文件
热门文章
- 今天在看慕课网的java学习路径
- OA学习笔记-006-SPRING2.5与hibernate3.5整合
- zbox mysql_20190213云服务器部署禅道
- 电脑键盘上每个键的作用_眼看着淡出大众视野 键盘上Esc键的隐秘往事
- python中matplotlib画图_Python-matplotlib画图(莫烦笔记)
- java懒加载设计模式_java设计模式——单例模式
- Linux下安装并使用MySQL数据库
- 帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程
- vue样式绑定与事件处理器的基本使用
- OpenResty学习地图来啦,速速收藏!