JVM活学活用——调优工具
概述
工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来。
jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具。jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工具已经很强大,几乎涉及了方方面面,但是我们最常使用的只有两款:jconsole.exe和jvisualvm.exe;第三方的分析工具有很多,各自的侧重点不同,比较有代表性的:MAT(Memory Analyzer Tool)、GChisto等。
对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。JVM 能够记录下问题发生时系统的部分运行状态,并将其存储在堆转储 (Heap Dump) 文件中,从而为我们分析和诊断问题提供了重要的依据。其中VisualVM和MAT是dump文件的分析利器。
JDK自带工具
Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的应用程序的性能和资源消耗等信息。
直接在jdk/bin目录下点击jconsole.exe即可启动,界面如下:
远程监控,请查看上一篇文章(JVM活学活用——springboot优化)的描述。
连接进去之后,就可以看到jconsole概览图和主要的功能:概述、内存、线程、类、VM、MBeans
概述,以图表的方式显示出堆内存使用量,活动线程数,已加载的类,CUP占用率的折线图,可以非常清晰的观察在程序执行过程中的变动情况。
内存,主要展示了内存的使用情况,同时可以查看堆和非堆内存的变化值对比,也可以点击执行GC来处罚GC的执行
线程,主界面展示线程数的活动数和峰值,同时点击左下方线程可以查看线程的详细信息,比如线程的状态是什么,堆栈内容等,同时也可以点击“检测死锁”来检查线程之间是否有死锁的情况。
-
- 类,主要展示已加载类的相关信息。
- VM 概要,展示JVM所有信息总览,包括基本信息、线程相关、堆相关、操作系统、VM参数等。
- Mbean,查看Mbean的属性,方法等。
- 类,主要展示已加载类的相关信息。
VisualVM
VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。
VisualVM 是javajdk自带的最牛逼的调优工具了吧,也是我平时使用最多调优工具,几乎涉及了jvm调优的方方面面。同样是在jdk/bin目录下面双击jvisualvm.exe既可使用,启动起来后和jconsole 一样同样可以选择本地和远程,如果需要监控远程同样需要配置相关参数,主界面如下;
VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。
如何安装:
1、从主菜单中选择“工具”>“插件”。 2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。 3、逐步完成插件安装程序。
我这里以 Eclipse(pid 22296)为例,双击后直接展开,主界面展示了系统和jvm两大块内容,点击右下方jvm参数和系统属性可以参考详细的参数信息.
因为VisualVM的插件太多,我这里主要介绍三个我主要使用几个:监控、线程、Visual GC
监控的主页其实也就是,cpu、内存、类、线程的图表
线程和jconsole功能没有太大的区别
Visual GC 是常常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。
因为VisualVM的插件太多,我这里主要介绍三个我主要使用几个:监控、线程、Visual GC
监控的主页其实也就是,cpu、内存、类、线程的图表
线程和jconsole功能没有太大的区别
Visual GC 是常常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。
以上的功能其实jconsole几乎也有,VisualVM更全面更直观一些,另外VisualVM非常多的其它功能,可以分析dump的内存快照,dump出来的线程快照并且进行分析等,还有其它很多的插件大家可以去探索
个人博客网站 http://www.janti.cn

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 一.异常的概述 异常算是程序中一个比较重要的环节了,我们首先来看一下异常的体系,我们举一个小例子,定义一个除法方法 //公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方法 数组 public static void main(String[] str) { Demo d = new Demo(); System.out.println(d.div(6, 2)); } } class Demo { /** * 定义一个除法 * * @param a * @param b * @return */ int div(int a, int b) { return a / b; } } 这段程序很好理解吧,就是除嘛,传6和2进去,的出来的结果肯定是3呀,但是,我现在传一个4和0,那输出的结果又会是什么呢? OK,异常出现了 异常:就是程序在运行时出现的不正常情况 异常的由来 问题也是现实生活中一个具体的事...
- 下一篇
JavaScript instanceof 运算符深入剖析
转自:https://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/ instanceof 运算符简介 在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object"。ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题。instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。例如: 清单 1. instanceof 示例 1 2 var oStringObject = new String("hello world"); console.log(oStringObject instanceof String); // 输出 "true" 这段代码问的是“变量 oStringObject 是否为 String 对象的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题