4大JVM性能分析工具详解,及内存泄漏分析方案

谈到性能优化分析一般会涉及到:

Java代码层面的,典型的循环嵌套等

还会涉及到Java JVM:内存泄漏溢出等

MySQL数据库优化:分库分表、慢查询、长事务的优化等

阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结

阿里P8架构师谈:架构设计之数据库垂直、水平拆分六大原则(数据库分库分表)

常用的后端性能优化六种方式:缓存化+服务化+异步化等

阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则

阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结

阿里P8架构师谈:多线程、架构、异步消息、Redis等性能优化策略


今天主要分享JVM性能调优工具,文末有详细的JVM调优方法和步骤。

什么场景需要JVM调优

  1. OutOfMemoryError,内存不足
  2. 内存泄露
  3. 线程死锁
  4. 锁争用(Lock Contention)
  5. Java进程消耗CPU过高

这些问题出现的时候常常通过重启服务器或者调大内存来临时解决,实际情况,还需要尽量还原当时的业务场景,并分析内存、线程等数据,通过分析找到最终的解决方案,这就会涉及到性能分析工具。

JVM性能监控分析工具

JDK本身提供了很丰富的性能监控工具,除了集成式的visualVM和jConsole外,还有jstat,jstack,jps,jmap,jhat小工具,这些都是性能调优的常用工具。

  1. Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。
  2. JProfiler:商业软件,功能强大。
  3. VisualVM:JDK自带,功能强大,与JProfiler类似。
  4. MAT:MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具。

下面介绍这些JVM工具的使用

4大JVM性能分析工具详解,及内存泄漏分析方案

JVM性能调优工具

VisualVM

VisualVM 是javajdk自带的牛逼的调优工具,也是平时使用最多调优工具,几乎涉及了jvm调优的方方面面。启动起来后和jconsole 一样同样可以选择本地和远程,如果需要监控远程同样需要配置相关参数。

1 打开VisualVM

这个工具放在JDK安装目录的bin目录下,双击jvisualvm.exe即可打开,如下图所示

4大JVM性能分析工具详解,及内存泄漏分析方案

2. 监视页面主要展示 系统资源占用情况

4大JVM性能分析工具详解,及内存泄漏分析方案
  • CPU :展示java程序运行的时候占用的cpu资源
  • :这里要说明下堆内存的组成部分,堆是由老年代和新生代组成,其中新生代有由”伊甸园”和”两个幸存区组成”三部分组成,堆视图看到的资源占用实际是”老年代”、”伊甸园(Eden)”、”两个幸存者(Survivor )”的一个综合情况。
  • PermGen :Perm 区用来存放java类以及其他虚拟机自己的静态数据,(常被称为持久代或者方法区)
  • :此视图 主要展示 当前程序加载了多少个类
  • 线程: 当前程序的线程启动情况
  • 堆Dump : 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。

3. 线程页面(主要展示程序中所有的线程运行状态)

  • 线程dump : 所有线程的快照(对分析线程死锁,比较有帮助
  • 时间线 : 展示每个线程的实时运行状态(不同颜色代表不同的状态)
4大JVM性能分析工具详解,及内存泄漏分析方案

VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。

Jconsole

JConsole是一个JMX(Java
Management
Extensions,即Java管理扩展)的JVM监控与管理工具,监控主要体现在:堆栈内存、线程、CPU、类、VM信息这几个方面,而管理主要是对JMX
MBean(managed
beans,被管理的beans,是一系列资源,包含对象、接口、设备等)的管理,不仅能查看bean的属性和方法信息,还能够在运行时修改属性或调用方法。

1.打开Jconsole

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

4大JVM性能分析工具详解,及内存泄漏分析方案

1、内存

在内存页我们可以看到程序运行期间JVM各个部分的内存状况,右下角是对应各个分区的内存使用柱状图,点击对应柱可查看详情,看图:

4大JVM性能分析工具详解,及内存泄漏分析方案

2、线程

该页面可以查看当前JVM进程启动了多少个线程,并能查看每个线程的状态及堆栈信息,此外还有一个功能就是能够自动检测死锁,见图:

4大JVM性能分析工具详解,及内存泄漏分析方案

3、类

该页面其实和线程页有些相似,不过显示的是JVM加载类的信息,见图:

4大JVM性能分析工具详解,及内存泄漏分析方案

4、VM概述

这个其实没必要细说,看图就明白,显示了当前JVM的各方面信息:

4大JVM性能分析工具详解,及内存泄漏分析方案

5、MBean管理

4大JVM性能分析工具详解,及内存泄漏分析方案

MAT

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。

可以利用visualvm或者是 jmap命令生产堆文件在进行内存分析。

1. 用jmap生成堆信息

4大JVM性能分析工具详解,及内存泄漏分析方案

这样在E盘的jmap文件夹里会有一个map.bin的堆信息文件

2. 将堆信息导入到mat中分析

4大JVM性能分析工具详解,及内存泄漏分析方案

3. 生成分析报告

可以利用visualvm或者是 jmap命令生产堆文件,导入eclipse mat中生成分析报告:

4大JVM性能分析工具详解,及内存泄漏分析方案

1)Histogram(直方图)视图

4大JVM性能分析工具详解,及内存泄漏分析方案
  • Class Name : 类名称,java类名
  • Objects : 类的对象的数量,这个对象被创建了多少个
  • Shallow Heap :一个对象内存的消耗大小,不包含对其他对象的引用
  • Retained Heap :是shallow Heap的总和,也就是该对象被GC之后所能回收到内存的总和

通过直方图视图可以很容易找到占用内存最多的几个类(通过Retained Heap排序),还可以通过其他方式进行分组(见下图)。

4大JVM性能分析工具详解,及内存泄漏分析方案

如果存在内存溢出,时间久了溢出类的实例数量或者内存占比会越来越多,排名也越来越靠前。

图标进行对比,通过多次对比不同时间点下的直方图对比就很容易把溢出的类找出来。

4大JVM性能分析工具详解,及内存泄漏分析方案

2)支配树(Dominator Tree)

MAT提供了一个称为支配树(Dominator Tree)的对象图。支配树体现了对象实例间的支配关系,在此视图中列出了每个对象(Object Instance)与其引用关系的树状结构,同时包含了占用内存的大小和百分比。

4大JVM性能分析工具详解,及内存泄漏分析方案

通过Dominator Tree视图可以很容易的找出占用内存最多的几个对象(根据Retained Heap或Percentage排序),和Histogram类似,可以通过不同的方式进行分组显示:

4大JVM性能分析工具详解,及内存泄漏分析方案

Histogram视图和Dominator Tree视图的角度不同,前者是基于类的角度,后者是基于对象实例的角度,并且可以更方便的看出其引用关系。

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

JVM内存泄漏分析

4大JVM性能分析工具详解,及内存泄漏分析方案

造成OutOfMemoryError内存泄露典型原因:对象已经死了,无法通过垃圾收集器进行自动回收,需要通过找出泄露的代码位置和原因,才好确定解决方案。

分析步骤:

1. 用工具生成java应用程序的heap dump(如jmap)

2. 使用Java heap分析工具(如MAT),找出内存占用超出预期的嫌疑对象

3. 根据情况,分析嫌疑对象和其他对象的引用关系。

4. 分析程序的源代码,找出嫌疑对象数量过多的原因。

更多详细JVM调优分析和参数设置请参考JVM性能调优的6大步骤,及关键调优参数详解


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 0 搭建一个工业级推荐系统

推荐系统从来没像现在这样,影响着我们的生活。当你上网购物时,天猫、京东会为你推荐商品;想了解资讯,头条、知乎会为你准备感兴趣的新闻和知识;想消遣放松,抖音、快手会为你奉上让你欲罢不能的短视频。而驱…

论文浅尝 | 虚拟知识图谱:软件系统和应用案例综述

本文转载自公众号:DI数据智能。Virtual Knowledge Graphs: An Overview of Systems and Use Cases作者:Guohui Xiao, Linfang Ding, Benjamin Cogrel & Diego Calvanese供稿:Guohui Xiao编者按:Data Intelligence 发表意大利博…

LeetCode 169. 求众数(摩尔投票)

文章目录1. 题目信息2. 解题思路3. 代码3.1 排序3.2 map计数3.3 摩尔投票1. 题目信息 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例 1:输入…

阿里P8架构师谈:JVM的内存分配、运行原理、回收算法机制

不管是BAT面试,还是工作实践中的JVM调优以及参数设置,或者内存溢出检测等,都需要涉及到Java虚拟机的内存模型、内存分配,以及回收算法机制等,这些都是必考、必会技能。 JVM内存模型 JVM内存模型可以分为两个部分&…

我的BERT!改改字典,让BERT安全提速不掉分(已开源)

文 | 苏剑林编 | 小轶背景当前,大部分中文预训练模型都是以字为基本单位的,也就是说中文语句会被拆分为一个个字。中文也有一些多粒度的语言模型,比如创新工场的ZEN和字节跳动的AMBERT,但这类模型的基本单位还是字,只不…

2020年考证时间表汇总!这些证书值得拥有!

原文地址: https://zhuanlan.zhihu.com/p/100824416 2020年考证时间表汇总!这些证书值得拥有!已认证的官方帐号154 人赞同了该文章昨日之日不可留,2019年已然过去,2020年的我们不能再一成不变!快根据自身情…

征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)第二轮征稿启事

2019年全国知识图谱与语义计算大会China Conference on Knowledge Graph and Semantic Computing (CCKS 2019)2019年8月24日-27日,杭州征稿截止: 2019年5月18日全国知识图谱与语义计算大会(CCKS: China Conference on Knowledge Graph and Semantic Comp…

直通BAT必考题系列:JVM的4种垃圾回收算法、垃圾回收机制与总结

BAT必考JVM系列专题 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置 垃圾回收算法 1.标记清除 标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。 在标记阶段首先通过根节点(GC Roots),标记所…

遗传算法及其应用实现

使用遗传算法求解函数具有最大值的点X """ Visualize Genetic Algorithm to find a maximum point in a function. """ import numpy as np import matplotlib.pyplot as pltDNA_SIZE 10 # DNA length POP_SIZE 100 # population size CROSS…

论文浅尝 | 一种嵌入效率极高的 node embedding 方式

论文笔记整理:叶群,浙江大学计算机学院,知识图谱、NLP方向。会议:WSDM 2019链接:https://dl.acm.org/citation.cfm?id3290961Motivation基于spring-electrical的模型在网络可视化中取得了非常成功的应用,一…

重要的,是那些训练中被多次遗忘的样本

文 | kid丶源 | 知乎编 | 兔子酱今天跟大家分享一篇很有意思的文章,是一篇探讨深度学习模型记忆&遗忘机制的文章,是一篇角度很新颖的题材,同时又有一定启发作用。这篇文章发表在深度学习顶会ICLR19,标题是《An empirical stud…

直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景

直通BAT之JVM系列 直通BAT必考题系列:JVM的4种垃圾回收算法、垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置 今天继续JVM的垃圾回收器详解,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集…

模拟嫁接技术

模拟嫁接技术:定义嫁接算子及策略剪接算子及策略GPOGA算法总结定义 收益和代价 对一棵生成树 T1,若将某结点的一条分枝移至另一结点作为其一条分枝后产生的生成树为 T2,考察分枝移动前后生成树的边长和的变化,则定义收益(gain)和…

HuggingFace又出炼丹神器!稀疏矩阵运算进入平民化时代!

文 | rumor酱编 | YY一提到模型加速,大家首先想到的就是蒸馏、(结构性)剪枝、量化(FP16),然而稀疏矩阵(sparse matrix)运算一直不被大家青睐。原因也很简单,一是手边没有…

章乐焱 | 用“科技”监管“科技”,知识图谱能做什么?

本文转载自公众号:恒生技术之眼。人工智能、大数据等前沿科技的爆发,推动金融科技进入了一个崭新的时代,也成为监管科技发展的重要推动力。在这个Fintech的黄金时代,前沿科技正在如何赋能监管?这方面,恒生公…

LeetCode 23. 合并K个排序链表(优先队列)

文章目录1. 题目信息2. 思路3. 代码1. 题目信息 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例:输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2->3->4->4->5->6来源:力扣(…

直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解

JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法、垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置 JVM内存调优 对JVM内存的系统级…

论文浅尝 | 知识图谱三元组置信度的度量

论文笔记整理:叶橄强,浙江大学计算机学院,知识图谱和知识推理方向。https://arxiv.org/pdf/1809.09414.pdf动机在构建知识图谱的过程中,不可避免地会产生噪声和冲突。基于知识图谱的任务或应用一般默认假定知识图谱中的知识是完全…

跟小伙伴们做了个高效刷论文的小站

好久木有在知乎冒泡了,不知道还能不能出现在大家的timeline上哇QAQ正文开始之前还是先习惯性的碎碎念一下。前段时间换了研究方向,重新pick了问答和检索,为了追上相关问题的最新进展,就顾不上写文的刷了一堆paper,加上…

模拟进化与遗传算法

遗传算法是目前研究得最为广泛的一类模拟进化算法。 假定考虑全局优化问题(P)。遗传算法基于以下两条基本策略求解问题: 对于给定的目标函数F,它使用F的任一适应性函数(换言之,一个值域非负、…