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

目录

  • 概述
  • GCEasy
    • 官网
    • jvm内存占用情况
    • 关键性能指标
    • 堆内存与元空间优化
  • MAT
    • 安装
    • MAT相关概念说明
      • 内存泄漏与内存溢出
      • shallow heap及retained heap
      • outgoing references与incoming references
      • Dominator Tree
  • GCViewer
  • Arthas
    • 下载安装与启动
      • jdk8
      • jdk 11
      • jdk11自定义boot jar
      • jdk17
    • 常用命令
      • dashboard
      • 查看线程 thread
      • 反编译已加载类源码
  • 结束

概述

工具详解
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

# 不行
/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

/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

/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 可以中断执行

dashboard

在这里插入图片描述

查看线程 thread

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

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

thread -1

在这里插入图片描述

反编译已加载类源码

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

jad com.fun.demo.controller.JMeterController

在这里插入图片描述

结束

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

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

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

相关文章

LVS负载均衡集群和NAT模式部署

目录 一、群集的类型及含义 二、LVS的三种工作模式 一、根据群集所针对的目标差异,可分为三种类型 二、LVS的负载调度算法 三、ipvsadm 工具选项 四、NAT模式 LVS负载均衡群集部署 1.共享服务器配置: 2.节点服务器1配置 3.节点服务器2 4.配置负…

spring 笔记八 SpringMVC异常处理和SpringMVC拦截器

文章目录 SpringMVC拦截器拦截器(interceptor)的作用拦截器和过滤器区别拦截器是快速入门拦截器方法说明 SpringMVC拦截器拦截器(interceptor)的作用拦截器和过滤器区别拦截器是快速入门拦截器方法说明 SpringMVC异常处理异常处理…

网络服务IP属地发生变化的原因有哪些?

近期,许多用户发现自己的网络服务IP属地发生了变化。原本固定的IP地址不再是静态的,而是发生了变动。这一现象引起了广大用户的关注和疑惑,对网络服务的使用和信息安全产生了影响。为了解决用户的疑虑,我们对此现象进行了深入探究…

java.lang.UnsupportedOperationException

一、背景 记录一次小坑… 最近在写一个关于Excel导出的小需求,由于系统都有一些工具类,还有原来已经做好的导出,直接拿过来改了改就用了,没想到直接报错,尴尬。 还是那句话,别人都能用,我复制…

国产浪潮服务器:风扇免手动调节脚本

简介:浪潮集团,是中国本土顶尖的大型IT企业之一,中国领先的云计算、大数据服务商。浪潮集团旗下拥有浪潮信息、浪潮软件、浪潮国际,业务涵盖云计算、大数据、工业互联网等新一代信息技术产业领域,为全球120多个国家和地…

【人工智能】模糊推理

模糊推理:交叉的隶属函数,方法如模糊规则中推理方法一致,step3中的每一个格子都有所应的隶属关系函数 引言:“生活中的模糊关系”模糊集合模糊集合的定义模糊集合的表示法模糊集合表示法示例 隶属函数 模糊规则模糊计算的流程 引言&#xff1…

RT-DETR 目标过线计数

使用 Ultralytics RT-DETR 进行目标计数 🚀 实际应用场景 物流水产养殖使用 Ultralytics RT-DETR 进行传送带包裹计数使用 Ultralytics RT-DETR 在海中进行鱼类计数请使用最新代码(2023年12月8日后),旧版本不支持! 示例 “目标计数示例” 目标计数 from ultralytics

初识Redis缓存,一文掌握Redis重要知识文集。

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

存储拆分后,如何解决唯一主键问题?

之前我们讲到了分库分表,现在考虑这样一个问题:在单库单表时,业务 ID 可以依赖数据库的自增主键实现,现在我们把存储拆分到了多处,如果还是用数据库的自增主键,势必会导致主键重复。 那么我们应该如何解决…

【算法】【动规】乘积为正数的最长子数组长度

跳转汇总链接 👉🔗算法题汇总链接 1.1 乘积为正数的最长子数组长度 🔗题目链接 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积…

docker镜像与容器的迁移

docker容器迁移有两组命令,分别是 save & load :操作的是images, 所以要先把容器commit成镜像export & import:直接操作容器 我们先主要看看他们的区别: 一 把容器打包为镜像再迁移到其他服务器 如把mysq…

RMQ算法总结

知识概览 RMQ又叫ST表、跳表,可以用来解决区间最值问题,这里这有查询没有修改。当然,这样的问题用线段树也是可以解决的。RMQ算法本质上是倍增动态规划,它的思想是先倍增预处理再查询。f(i, j)表示从i开始,长度是的区…

【Jeecg Boot 3 - 第二天】2.1、nginx 部署 JEECGBOOT VUE3

一、场景 二、实战 ▶ 2.1、打包(build 前端) > Stage 1:修改配置文件 .env.production(作用:指向后端接口地址) > Stage 2:点击build(作用&#xff1…

虚幻学习笔记13—C++静态和动态加载

一、前言 我们在蓝图中可以很方便的添加各种需要的组件,那么在C代码中要如何实现呢。在代码中分静态和动态加载,而无论静态和动态,加载的内容有资源和资源类,资源类通常为带资源的蓝图类。 二、实现 在实现静态或动态加载时&…

生成式AI的力量,释放RPA的无限潜能

回首即将过去的2023年,互联网行业似乎始终处在各种新概念的热潮激荡之中。其中,最引人注目的话题无疑是AI科技。自人工智能技术实现大规模突破以来,我们见证了一系列生成式AI的涌现。从ChatGPT到百度文心一言,它们纷纷登场&#x…

Cellinx NVT 摄像机 GetFileContent.cgi任意文件读取漏洞 (CVE-2023-23063)

0x01 产品简介 Cellinx NVT IP PTZ是韩国Cellinx公司的一个摄像机设备。 0x02 漏洞概述 Cellinx NVT v1.0.6.002b版本存在安全漏洞,该漏洞源于存在本地文件泄露漏洞,攻击者可读取系统密码等敏感信息。 0x03 复现环境 FOFA:body"loc…

云仓酒庄带您品法国葡萄酒

说起葡萄酒肯定绕不开法国,法国葡萄酒闻名中外,口碑卓越。作为世界上的产酒大国,可以说是每一寸土地都可以种植葡萄。云仓酒庄的品牌雷盛红酒分享这么优秀的一个葡萄酒产酒国有哪些特点呢? 1.产区特色:波国有最著名的…

vue3 使用antd 报错Uncaught TypeError--【已解决】

问题现象 使用最基本的 ant-design-vue 按钮demo 都报错 报错文字如下 Uncaught TypeError: Cannot read properties of undefined (reading value)at ReactiveEffect.fn (ant-design-vue.js?v597f5366:6693:87)at ReactiveEffect.run (chunk-K2VKR2AM.js?v25c381c3:461:…

springboot发送邮件,内容使用thymeleaf模板引擎排版

springboot发送邮件,内容使用thymeleaf模板引擎排版 1、导入jar包2、yml设置3、收件人以及收件信息设置4、发邮件service5、模版页面6、controller 1、导入jar包 <!--发送邮件--><dependency><groupId>org.springframework.boot</groupId><artifac…

react经验7:高亮关键字

预期效果&#xff1a; 实现原理 将需要高亮的关键词做成正则表达式 new RegExp((${word}), "gi")使用上述正则表达式切割目标字符串 origin.split(new RegExp((${word}), "gi"))切割结果会包含正则匹配到的词 过滤掉空字符&#xff0c;并对关键词包裹…