11.jvm第三方工具使用实践

目录

概述

工具 详解
GCEasy 免费GC日志可视化分析Web工具
MAT:Memory Analyzer Tool 可视化内存分析工具
GCViewer 开源的GC日志分析工具
Arthas 线上java程序诊断工具,功能非常强大

GCEasy

业界首先采用机器学习算法解决GC日志分析问题,GCeasy内置机器智能可以自动检测jvm和android GC日志中的问题,并推荐解决方案。

官网

地址

GC日志分析是免费的,Machine Learning 收费

  • 几秒内解决GC和内存问题
  • jvm堆优化建议
  • 机器学习

默认英文,切换语言成中文,上传日志文件,即可分析

jvm内存占用情况

关键性能指标

堆内存与元空间优化

MAT

MAT是一个强大的可视化内存分析工具,可以快捷、有效的帮助找到内存泄露、减少内存消耗的分析工具。MAT是(Memory Analyzer Tool) 的缩写,是一种快速,功能丰富的java堆分析工具。

功能:

  • 找到最大的对象,因为MAT提供显示合理的累积大小(retained size)
  • 探索对象图,包括inbound和outbound引用,即引用此对象的和此对象引出的
  • 查找无法回收的对象,可以计算从垃圾收集器根到相关对象的路径
  • 找到内存浪费,比如冗余的String对象、空集合对象

安装

MAT安装有两种方式,一种是以eclipse插件方式安装,一种是独立安装。

注意: 可能有bug,更新版本即可。

MAT download

MAT相关概念说明

内存泄漏与内存溢出

找到 jvm最大的对象 ,是解决内存泄漏与内存溢出关键点。

  • 内存泄露:对象是垃圾了,还存在被GCRoots引用的情况,无法被垃圾收集器回收
    • 解决方案:找出泄漏的代码位置和原因,具体问题具体解决
  • 内存溢出:内存中的对象非常多,堆空间 不足,就会出现。
    • 解决方案:检查堆大小设置是否合理,检查是否存在对象生命周期太长、持有状态时间太长的情况。

shallow heap及retained heap

  • shallow heap:对象本身占用内存的大小,也就是对象内存区域的总和。
  • retained heap:对象及对象引用链中所有对象的大小总和,如果一个对象被释放掉,因为该对象的释放而被释放的所有对象的大小。相对于shallow head,Retained heap可以更精确的反映一个对象实际占用的大小。

outgoing references与incoming references

  • outgoing references:表示该对象的出节点(被该对象引用的对象)。
  • incoming references:表示该对象的入节点(引用到该对象的对象)。

Dominator Tree

Dominator Tree 对象的支配树;帮助快速的发现占用内存最大的块,也能帮助分析对象的依赖关系。

GCViewer

GCViewer是一款开源的GC日志分析工具。项目的GitHub主页对各个指标提供了完整的描述信息,需要安装jdk才能使用。借助GCViewer日志分析工具,可以非常直观的分析出待调优点。

可从以下几方面来分析:

  • Memory:分析totalheap、Tenuredheap、Youngheap内存占用率及其它指标,理论上内存占用率越小越好
  • Pause:分析GC pause、FullGC pause、Total pause 三个大项中各指标,理论上GC次数越少越好,GC时长越小越好。

Arthas

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常、监测方法执行耗时,类加载信息等,大大提升线上问题的排查效率。

Arthas支持jdk1.6+,支持Linux、Mac、Windows,采用命令行交互模式,则是提供丰富的Tab自动补全功能,进一步方便进行问题的定位和诊断。

下载安装与启动

download

bash 复制代码
# 不行
/data/soft/jdk-17.0.9/bin/java -jar arthas-boot.jar
# 
/data/soft/jdk-11.0.20/bin/java -jar math-game.jar
/data/soft/jdk-11.0.20/bin/java -jar arthas-boot.jar


jdk8

没有问题

jdk 11

bash 复制代码
/data/soft/jdk-11.0.20/bin/java -jar math-game.jar
/data/soft/jdk-11.0.20/bin/java -jar arthas-boot.jar

jdk11自定义boot jar


jdk17

bash 复制代码
/data/soft/jdk-17.0.9/bin/java -jar math-game.jar
/data/soft/jdk-17.0.9/bin/java -jar arthas-boot.jar


自己写的jdk17的spring boot 不行。

常用命令

dashboard

展示当前进程的信息,按 ctrl+c 可以中断执行

bash 复制代码
dashboard

查看线程 thread

通过 thread 命令来获取到应用进程的线程信息。thread -1 会打印线程统计信息。

TIMED_WAITING(超时等待) 状态相当于在等待状态的基础上增加了超时限制。

bash 复制代码
thread -1

反编译已加载类源码

运行期通过jad来反编译项目代码。

bash 复制代码
jad com.fun.demo.controller.JMeterController

结束

jvm第三方工具使用实践 至此就结束了,如有疑问,欢迎评论区留言。

相关推荐
鱼跃鹰飞7 小时前
大厂面试真题-简单说说线程池接到新任务之后的操作流程
java·jvm·面试
王佑辉8 小时前
【jvm】Major GC
jvm
阿维的博客日记8 小时前
jvm学习笔记-轻量级锁内存模型
jvm·cas·轻量级锁
曹申阳11 小时前
2. JVM的架构模型和生命周期
jvm·架构
琪露诺大湿12 小时前
JavaEE-多线程初阶(4)
java·开发语言·jvm·java-ee·基础·1024程序员节·原神
王佑辉15 小时前
【jvm】Full GC
jvm
九鼎科技-Leo15 小时前
C# 内存管理与对象生命周期在面向对象设计中的重要性
jvm·c#
王佑辉1 天前
【jvm】堆空间分代思想
jvm
为啥不能修改昵称啊1 天前
静态数据区,堆,栈
java·jvm·算法
救苦救难韩天尊2 天前
《JVM第7课》堆区
jvm