51CTO首页
AI.x社区
博客
学堂
精品班
免费课
企业培训
鸿蒙开发者社区
WOT技术大会
AIGC创新中国行
IT证书
公众号矩阵
移动端

jvm系列(七):jvm调优-工具篇

开发 开发工具 前端
vm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具。

16年的时候花了一些时间整理了一些关于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

Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的应用程序的性能和资源消耗等信息。

直接在jdk/bin目录下点击jconsole.exe即可启动,界面如下:

在弹出的框中可以选择本机的监控本机的java应用,也可以选择远程的java服务来监控,如果监控远程服务需要在tomcat启动脚本中添加如下代码:

  1. -Dcom.sun.management.jmxremote.port=6969  
  2. -Dcom.sun.management.jmxremote.ssl=false  
  3. -Dcom.sun.management.jmxremote.authenticate=false 

连接进去之后,就可以看到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的时间等。

以上的功能其实jconsole几乎也有,VisualVM更全面更直观一些,另外VisualVM非常多的其它功能,可以分析dump的内存快照,dump出来的线程快照并且进行分析等,还有其它很多的插件大家可以去探索

第三方调优工具

MAT

MAT是什么?

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。

通常内存泄露分析被认为是一件很有难度的工作,一般由团队中的资深人士进行。不过要介绍的 MAT(Eclipse Memory Analyzer)被认为是一个“傻瓜式“的堆转储文件分析工具,你只需要轻轻点击一下鼠标就可以生成一个专业的分析报告。和其他内存泄露分析工具相比,MAT 的使用非常容易,基本可以实现一键到位,即使是新手也能够很快上手使用。

MAT以eclipse 插件的形式来安装,具体的安装过程就不在描述了,可以利用visualvm或者是 jmap命令生产堆文件,导入eclipse mat中生成分析报告:

生产这会报表的同时也会在dump文件的同级目录下生成三份(dump_Top_Consumers.zip、dump_Leak_Suspects.zip、dump_Top_Components.zip)分析结果的html文件,方便发送给相关同事来查看。

需要关注的是下面的Actions、Reports、Step by Step区域:

  • Histogram:列出内存中的对象,对象的个数以及大小,支持正则表达式查找,也可以计算出该类所有对象的retained size

  • Dominator Tree:列出***的对象以及其依赖存活的Object (大小是以Retained Heap为标准排序的)

  • Top Consumers : 通过图形列出***的object

  • duplicate classes :检测由多个类装载器加载的类
  • Leak Suspects :内存泄漏分析

  • Top Components: 列出大于总堆数的百分之1的报表。

  • Component Report:分析对象属于同一个包或者被同一个类加载器加载

以上只是一个初级的介绍,mat还有更强大的使用,比如对比堆内存,在生产环境中往往为了定位问题,每隔几分钟dump出一下内存快照,随后在对比不同时间的堆内存的变化来发现问题。

GChisto

GChisto是一款专业分析gc日志的工具,可以通过gc日志来分析:Minor GC、full gc的时间、频率等等,通过列表、报表、图表等不同的形式来反应gc的情况。虽然界面略显粗糙,但是功能还是不错的。

配置好本地的jdk环境之后,双击GChisto.jar,在弹出的输入框中点击 add 选择gc.log日志

  • GC Pause Stats:可以查看GC 的次数、GC的时间、GC的开销、***GC时间和最小GC时间等,以及相应的柱状图

  • GC Pause Distribution:查看GC停顿的详细分布,x轴表示垃圾收集停顿时间,y轴表示是停顿次数。
  • GC Timeline:显示整个时间线上的垃圾收集

不过这款工具已经不再维护,不能识别***jdk的日志文件。

gcviewer

GCViewer也是一款分析小工具,用于可视化查看由Sun / Oracle, IBM, HP 和 BEA Java 虚拟机产生的垃圾收集器的日志,gcviewer个人感觉显示 的界面比较乱没有GChisto更专业一些。

GC Easy

这是一个web工具,在线使用非常方便.

地址: http://gceasy.io

进入官网,讲打包好的zip或者gz为后缀的压缩包上传,过一会就会拿到分析结果。

推荐使用此工具进行gc分析。

【本文为51CTO专栏作者“纯洁的微笑”的原创稿件,转载请通过微信公众号联系作者获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐
jvm系列(四):jvm-命令
SunJDK监控和故障处理命令有jpsjstatjmapjhatjstackjinfo下面做一一介绍

2017-09-22 15:15:23

jvm 调优 命令
浅谈JVM
本文将为您介绍Java的JVM调优的基本概念和技巧,帮助您提高应用程序的性能。

2023-11-11 19:07:23

JVM Java
JVM总结:方法
下面文章将讲解JVM的调优工具以及如何去调优等等问题,还有一些异常问题的处理。详细请看下文。

2012-01-10 14:35:08

Java JVM
JVM好用的内存分析工具
持续优化和对比优化前后的GCLog,能确认吞吐量和性能是否得到提升。

2023-02-10 09:28:23

优化 工具
JVM性能监控工具使用详解
这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。

2019-11-01 08:49:07

JVM 监控 性能
Tomcat 性能JVM
做为一类“特殊”的Java应用程序,和任务其他的Java应用一样,需要使用到JVM,会有堆,会使用到垃圾回收,会涉及到不同的堆分区比例,因此在对Web容器(应用服务器)的调优中必不可少的是对于JVM的调优。

2017-07-21 08:55:13

Tomcat JVM 容器
【死磕JVM】什么是JVM
虚拟机参数分为基本和扩展两类,在命令行中输入JAVAHOME\bin\java就可得到基本参数列表。在命令行输入JAVAHOME\bin\java–X就可得到扩展参数列表。

2021-06-03 08:32:18

JVM 调优 虚拟机
图例解析JVM
本文向大家描述一下JVM条有总结,主要包括JVM调优工具的使用,及具体调优步骤,为了便于大家理解通过图例向大家解释,希望对你的学习有所帮助。

2010-09-26 13:39:46

JVM调优
JVM总结:反思
Java的垃圾回收确实带来了很多好处,为开发带来了便利。但是在一些高性能、高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈。

2012-01-10 15:13:56

Java JVM
JVM技巧集锦
这里向大家描述一下JVM调优技巧,在升级JVM版本时,如果能使用64bit,使用64bitJVM,另外对JVM堆内的各个区域(young,old,perm)正确设置大小。

2010-09-26 09:08:17

JVM调优
JVM参数、方法、工具以及案例总结
本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数、JVM调优方法(流程)、JVM调优工具、JVM调优案例,调优案例目前正在分析,会在将来补上。

2021-03-17 11:35:11

JVM 代码 Java
JVM参数技巧总结
本文通过实例向大家描述一下如何进行JVM参数调优,对于很多程序员来说这都是很头痛的问题,如果设置的不好,JVM不断执行FullGC,将导致整个系统变得很慢,网站停滞时间能达10秒以上。

2010-09-25 13:05:07

JVM参数
JVM内存设置原理
这里向大家简单介绍一下JVM内存调优设置原理,比如参数Xms是设置内存初始化的大小,而Xmx是设置最大能够使用内存的大小,相信你一定会感兴趣。

2010-09-26 10:53:00

JVM内存调优设置
JVM参数实例解析
要想做好JVM参数的调优,需要对年轻代、年老代、救助空间和永久代有一定了解,还要了解JVM内存管理逻辑,最终还要根据自己的应用来做调整,各个方面都要把握好。

2010-03-04 10:56:52

JVM参数
JVM常用参数
通过优化JVM的配置和参数设置,可以减少内存占用、提高垃圾回收效率、优化线程管理等,从而提升应用程序的响应速度、降低内存泄漏的风险,并且减少应用程序的崩溃和停顿现象。

2023-11-10 11:23:20

JVM 内存
JVM原理与深度
jvm是java虚拟机运行在用户态、通过应用程序实现java代码跨平台、与平台无关、实际上是"一次编译,到处执行"。

2021-11-21 23:03:38

jvm 调优 虚拟机
JVM的几种策略
你对JVM调优的概念是否熟悉,这里和大家分享一下,主要包括串行垃圾回收,并行回收,并发回收和增量回收等内容,相信本文介绍一定会让你有所收获。

2010-09-27 09:23:42

JVM调优
jvm系列(六):Java服务GC参数案例
总结来说,由于服务中大量使用了Cache,所以堆大小开到了22G。GC算法使用CMS(UseConcMarkSweepGC),开启了降低标记停顿(CMSParallelRemarkEnabled),设置年轻代为并行收集(UseParNewGC),年轻代和老年代的比例为1:2(NewRatio2).

2017-10-13 15:16:38

Java服务 GC 参数
经验分享 JVM方法总结
这里做一下JVM调优总结,首先要了解Young(年轻代),Tenured(年老代)和Perm(持久代)这几个概念,年轻代分三个区,一个Eden区,两个Survivor区;年老代存放从年轻代存活的对象;而用于存放静态文件,如今Java类、方法等。

2010-09-26 13:48:51

JVM调优
面试现场——聊聊JVM性能
经过几天的思考,我决定先更新一些面试中经常会被问及的一些知识点,以便能够帮助小伙伴们系统的梳理面试中需要掌握的知识技能。

2023-04-24 14:54:09

JVM 性能调优

深圳SEO优化公司龙岗网站关键词优化宝安模板制作荷坳优秀网站设计光明建设网站爱联网站建设观澜营销型网站建设西乡SEO按天计费坂田seo石岩关键词按天计费龙华网站优化排名龙岗网站改版东莞seo网站推广福永网站搜索优化大芬网站优化按天计费丹竹头SEO按效果付费罗湖百搜标王东莞网站开发南山网站优化大运网站优化同乐百度网站优化民治至尊标王布吉网站建设大浪设计网站永湖设计公司网站南澳网站制作设计横岗模板制作石岩模板网站建设观澜企业网站设计罗湖网站推广木棉湾关键词排名包年推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化