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

news2024/11/17 21:53:44

目录

  • 概述
  • 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.coloradmin.cn/o/1314112.html

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

相关文章

FIFO的Verilog设计(三)——最小深度计算

文章目录 前言一、FIFO的最小深度写速度快于读速度写速度等于或慢于读速度 二、 举例说明1. FIFO写时钟为100MHz,读时钟为80Mhz情况一:一共需要传输2000个数据,求FIFO的最小深度情况二:100个时钟写入80个数据,1个时钟读…

怎样下载微博视频而不至于发生“403 Forbidden“现象?

近段时间不知道从什么时候开始,微博视频都不让从网页下载了。以前是看到有想要下载的微博视频,就点进去微博详情页用谷歌浏览器F12进入调试的方式,选“Network”->“Media”->重新F5刷新页面等待调试框里出现链接->在链接上鼠标右键…

Nginx(四层+七层代理)+Tomcat实现负载均衡、动静分离

一、Tomcat多实例部署 具体步骤请看我之前的博客 写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/134956765?spm1001.2014.3001.9457 1.1 访问测试多实例的部署 1.2 分别在三个tomcat服务上部署jsp的动态页面 mkdir /usr/local/tomcat/webapps/test vim …

vue中实现PDF文件流预览

代码示例 <template><div class"print"><div v-if"!viewShow" class"opt-box"><div style"height: 700px; overflow: auto;"><el-table :data"tableData" border><el-table-column prop…

如何拍摄超级大像素图片,超级大像素有哪些应用

引言&#xff1a; 在数字摄影领域&#xff0c;超级大像素照片是指通过高像素的相机或拼接多张照片合成的照片。这样的照片具有更高的分辨率&#xff0c;细节更加清晰&#xff0c;绘画质感更强。那么如何拍摄超级大像素照片&#xff0c;超级大像素可以用在哪些领域呢。 一&…

C++使用回调函数的两种方式

一.函数指针 #include <iostream>typedef void (*callback)(int ,int); class MyTest { public:void setCallback(callback cb){m_callback = cb;}void add(int a, int b){m_callback(a, b);}private:callback m_callback; };void onCallback(int a, int b) {std::cout …

设计模式-策略(Strategy)模式

又被称为政策&#xff08;方针&#xff09;模式策略模式(Strategy Design Pattern)&#xff1a;封装可以互换的行为&#xff0c;并使用委托来决定要使用哪一个策略模式是一种行为设计模式&#xff0c;它能让你定义一系列算法&#xff0c;并将每种算法分别放入独立的类中&#x…

【导航栏内容的设置 Objective-C语言】

一、那接下来呢,我们就来做一做,关于导航控制器, 1.设置它顶部的导航栏儿内容的东西, 1)我们刚刚讲过的这个,通过代码去跳转、返回、 2)通过storyboard去跳转、返回、 但是,这两种情况,大家是不是已经注意到,导航栏里面,没有任何内容, 然后呢,返回,这是红色,…

centos下:mysql一些指令+mysql首次修改密码+mysql忘记密码修改

操作 查看mysql运行状态 systemctl status mysqld 停止mysql systemctl stop mysqld 启动mysql systemctl start mysqld 重启mysql systemctl restart mysqld 开启mysql开机自启动 systemctl enable mysqld 关闭mysql开机自启动 systemctl disable mysqld 查看具体的报错日…

动态内存管理,malloc和calloc以及realloc函数用法

目录 一.malloc函数的介绍 malloc的用法 举个例子 注意点 浅谈数据结构里的动态分配空间 二.calloc函数的介绍 三.realloc函数的介绍 四.柔性数组的介绍 为什么有些时候动态内存函数头文件是malloc.h,有些时候却是stdlib.h 一.malloc函数的介绍 malloc其实就是动态开辟…

innerHTML、innerText、textContent有什么区别

innerHTML、innerText、textContent有什么区别 在 HTML 中&#xff0c;innerHTML、innerText、 和textContent是 DOM&#xff08;文档对象模型&#xff09;的属性。它们允许我们读取和更新 HTML 元素的内容。 但它们在包含的内容以及处理 HTML 标签的方式有不同的行为。 读完…

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

jmeter,断言:响应断言、Json断言

一、响应断言 接口A请求正常返回值如下&#xff1a; {"status": 10013, "message": "user sign timeout"} 在该接口下创建【响应断言】元件&#xff0c;配置如下&#xff1a; 若断言成功&#xff0c;则查看结果树的接口显示绿色&#xff0c;若…

Spring Boot启动慢如何分析

如果发现项目启动慢&#xff0c;你知道怎么分析慢的原因吗&#xff1f; 分析方法 自定义监听器 SpringApplicationRunListener是Spring Boot中的一个接口&#xff0c;它的作用是在SpringApplication运行的各个阶段提供回调接口&#xff0c;以便我们可以在这些阶段执行自定义…

PPT插件-好用的插件-放映笔、绘图板-大珩助手

放映笔 幻灯片放映时&#xff0c;工具在幻灯片的左下方&#xff0c;本工具在幻灯片的右侧&#xff0c;可以移动&#xff0c;可以方便在右侧讲课时候使用 绘图板 可在绘图板上写签名、绘制图画、写字等等&#xff0c;点画笔切换橡皮擦&#xff0c;点插入绘图&#xff0c;将背景…

jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱

前言 个人其实一直的不太喜欢用邮箱发送报告&#xff0c;测试报告用邮件通知这都是五六年前的事情了&#xff0c;但有部分小伙伴依然执着于发邮件报告通知。 这里整理了下发邮箱通知的教程。 配置你的邮箱 配置邮箱这一步最繁琐&#xff0c;由于每个人使用的邮箱不一样&…

欧拉市场份额达36.8%,服务器操作系统市场份额第一

[中国&#xff0c;北京&#xff0c;2023年12月15日] 以“崛起数字时代&#xff0c;引领数智未来”为主题的操作系统大会2023今日在北京国家会议中心举办&#xff0c;大会由开放原子开源基金会、中国电子技术标准化研究院、国家工业信息安全发展研究中心、中国软件行业协会共同主…

【Java】SpringBoot中实现Redis Stream队列

SpringBoot实现Redis Stream队列 前言 简单实现一下在SpringBoot中操作Redis Stream队列的方式&#xff0c;监听队列中的消息进行消费。 jdk&#xff1a;1.8 springboot-version&#xff1a;2.6.3 redis&#xff1a;5.0.1&#xff08;5版本以上才有Stream队列&#xff09;…

机器学习算法---回归

1. 线性回归&#xff08;Linear Regression&#xff09; 原理&#xff1a; 通过拟合一个线性方程来预测连续响应变量。线性回归假设特征和响应变量之间存在线性关系&#xff0c;并通过最小化误差的平方和来优化模型。优点&#xff1a; 简单、直观&#xff0c;易于理解和实现。…

力扣题:数字与字符串间转换-12.16

力扣题-12.16 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;640. 求解方程 解题思想&#xff1a;首先将方程按照“”进行划分&#xff0c;然后分别记录x的因数和常数项&#xff0c;最后进行返回的判断即可 class Solution(object):def solveEqu…