当前位置: 首页 > news >正文

Java进阶(JVM调优)——阿里云的Arthas的使用 安装和使用 死锁查找案例,重新加载案例,慢调用分析

在这里插入图片描述

前言

JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。

本篇博客介绍JVM调优的工具阿里云的Arthas的使用,安装和使用,命令的使用案例;死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

其他相关的JVM博客文章如下:

  • Java进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例
  • Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化
  • Java进阶(垃圾回收GC)——理论篇:JVM内存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器
  • Java进阶(JVM调优)——JVM调优参数 & JDK自带工具使用 & 内存溢出和死锁问题案例 & GC垃圾回收

系列文章合集如下:
【合集】Java进阶——Java深入学习的笔记汇总 & 再论面向对象、数据结构和算法、JVM底层、多线程、类加载 …

目录

  • 前言
  • 引出
  • Arthas的使用
    • 官网和初识
    • 安装和使用
      • 1.启动自己的jar包
      • 2.然后启动阿尔萨斯
      • 3.命令参考
  • 命令的使用案例
  • 死锁的场景
    • thread 线程信息
    • jad反编译
  • retransform 重新加载某一个类的类信息
  • 调用慢的问题分析
    • trace调用路径
    • monitor 方法执行监控
  • 其他使用案例
  • 总结

引出


1.JVM调优的工具阿里云的Arthas的使用,安装和使用;
2.命令的使用案例,dashboard,heapdump,jvm,sm,jad;
3.死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

Arthas的使用

官网和初识

阿尔萨斯官网:https://arthas.aliyun.com/doc/

在这里插入图片描述

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

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从 JVM 内查找某个类的实例?

在这里插入图片描述

安装和使用

curl -O https://arthas.aliyun.com/arthas-boot.jar #下载arthasjava -jar arthas-boot.jar #启动阿尔萨斯

1.启动自己的jar包

java -jar -Xms200m -Xmx200M -XX:+PrintGC  -XX:-UseParallelGC spring-gc-demo-1.0-SNAPSHOT.jar

在这里插入图片描述

2.然后启动阿尔萨斯

在这里插入图片描述

在这里插入图片描述

3.命令参考

https://arthas.aliyun.com/doc/commands.html

在这里插入图片描述

命令的使用案例

1.dashboard

通过这个命令,可以查看哪根线程是最吃CPU的!替代:top -p 进程 -H

得到进程仪表盘,当前系统的实时数据面板,按 ctrl+c 退出

在这里插入图片描述

2.heapdump

替代jmap命令,dump java heap, 类似 jmap 命令的 heap dump 功能

3.jvm

查看当前 JVM 信息,替代jinfo命令

在这里插入图片描述

4.sm

查看已加载类的方法信息

在这里插入图片描述

5.jad

jad 反编译看一下

在这里插入图片描述

6.help

arthas 的帮助命令

7.memory

查看 JVM 内存信息

在这里插入图片描述

8.watch

让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值抛出异常入参

死锁的场景

thread 线程信息

查看当前线程信息,查看线程的堆栈

thread -h 查看帮助

在这里插入图片描述

在这里插入图片描述

检测死锁

thread -b 

在这里插入图片描述

jad反编译

想在Linux上直接查看某一个类的源代码,可以使用它来完成代码的反编译

在线反编译,比如:A 团队 调用 B团队的接口,当获得结果不对,那么则可以使用这种命令,在线查看B团队中的类的代码

类似于:javap

jad com.tianju.gc.controller.DeadLockController

在这里插入图片描述

retransform 重新加载某一个类的类信息

retransform

在不停止程序的情况,重新加载某一个类的类信息

retransform /root/CardInfo.class

在这里插入图片描述

在这里插入图片描述

retransform /usr/local/software/jar/java-gc-demo/CardInfo.class 

在这里插入图片描述

在这里插入图片描述

调用慢的问题分析

trace调用路径

方法内部调用路径,并输出方法路径上的每个节点上耗时

主要用于:性能调优

分布式系统使用:zipkin ,skywarking

在这里插入图片描述

在这里插入图片描述

trace命令查看调用链

在这里插入图片描述

monitor 方法执行监控

方法执行监控

服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变

在这里插入图片描述

其他使用案例

https://github.com/alibaba/arthas/issues?q=label%3Auser-case

https://github.com/alibaba/arthas/issues/1494

在这里插入图片描述


总结

1.JVM调优的工具阿里云的Arthas的使用,安装和使用;
2.命令的使用案例,dashboard,heapdump,jvm,sm,jad;
3.死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案例。

相关文章:

Java进阶(JVM调优)——阿里云的Arthas的使用 安装和使用 死锁查找案例,重新加载案例,慢调用分析

前言 JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。 本篇博客介绍JVM调优的工具阿里云的Arthas的使用,安装和使用,命令的使用案例;死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案…...

续:将基于Nasm汇编的打字小游戏,移植到DOSBox

续:将基于Nasm汇编的打字小游戏,移植到DOSBox 文章目录 续:将基于Nasm汇编的打字小游戏,移植到DOSBox前情提要细说1 编译2 程序入口3 定位段 运行体验 前情提要 上一篇:【编程实践】黑框框里的打字小游戏,但…...

外部访问K8S集群内部的kafka集群服务

不许转载 kafka 部署 把 kafka 部署到 k8s 后,我们肯定是通过 service 从 k8s 外部访问 kafaka。这里的 service 要么是 NodePort, 要么是 LoadBalancer 类型。我们使用的方式是 LoadBalancer。 我们先看下面这张图,这是 kafka 在集群中的网…...

AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘解决办法

在TensorFlow2环境下执行1.X版本的代码时报错: AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘ 当然第一时间想到的是利用 如下代码 来解决问题(大部分情况都是这样), tf.compat.v1但是又出现以下报错 Att…...

物奇平台耳机恢复出厂设置功能实现

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙音频,DSP音频项目核心开发资料, 物奇平台耳机恢复出厂设置功能实现 一 需求 1 耳机接收到充电盒长按12S指令后触发, 2 接收到…...

RFID携手制造业升级,为锂电池生产带来前所未有的可靠性

应用背景 随着科技的发展和全球化的推进,产品的生产过程越来越复杂,且对品质的要求也越来越高。在锂电池生产领域,由于其高能量密度、长寿命和环保特性,已被广泛应用于电动汽车、储能系统等领域。然而,锂电池的安全性和…...

【星海出品】flask (四) 三方工具使用

学习的灵魂是公社,学习的目标是人民自治.学习是非暴力革命方式的社会改革.学习是人民对抗资本剥夺的文明方式.学习失败了,就如同巴黎公社失败了一样.但是它为今后进行成功的社会改革指明了正确的方向.学习的逻辑并不复杂,一句话,必须让知识数量与知识价值基本吻合.管理学习也不…...

MongoDB 索引

类似关系型数据库,mongodb也建立自己的一套索引机制和查询优化方法。本文简单介绍mongodb的索引。后续文章讲详细介绍索引的操作,监控和查询优化方法等。 索引 索引,是一组按照特殊结构排列的,方便检索的数据。索引中保存了集合…...

[Hive] INSERT OVERWRITE DIRECTORY要注意的问题

在使用Hive的INSERT OVERWRITE语句时,需要注意以下问题: 数据覆盖:INSERT OVERWRITE语句会覆盖目标目录中的数据。因此,在执行该语句之前,请确保目标目录为空或者你希望覆盖的数据已经不再需要。数据格式:…...

刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新

时代在变,唯初心不改。 精致、谦虚、谨慎、儒雅、温和——他就是张顺新,湖南顺新金属制品科技有限公司、湖南顺新供应链管理有限公司董事长,民建长沙市委常委,民建湖南省环资委副主任,省、市民建企联会常务副会长&…...

DHorse(K8S的CICD平台)的实现原理

综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里。 在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具,比如…...

类图复习:类图简单介绍

入职新公司在看新项目的代码,所以借助类图梳理各个类之间的关系,奈何知识已经还给了老师,不得不重新学习下类图的相关知识,此处将相关内容记录下方便后续使用。 文章目录 类图语法类与类的关系画类图 类图语法 语法描述public-pr…...

【字符串】【双指针翻转字符串+快慢指针】Leetcode 151 反转字符串中单词【好】

【字符串】【双指针翻转字符串快慢指针】Leetcode 151 反转字符串中单词 解法1 双指针翻转字符串快慢指针更新数组大小 ---------------🎈🎈题目链接🎈🎈------------------- ---------------🎈🎈解答链接…...

3D Gaussian Splatting:用于实时的辐射场渲染

Kerbl B, Kopanas G, Leimkhler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14. 3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最…...

【nlp】文本处理的基本方法

文本处理的基本方法 1 什么是分词2 什么是命名实体识别3 什么是词性标准1 什么是分词 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形…...

C++17 std::filesystem

std::filesystem 是 C17 标准引入的文件系统库,提供了一套用于处理文件和目录的 API。它主要包括以下几个核心类: std::filesystem::path:用于表示文件系统路径。它提供了一系列方法,允许你对路径进行各种操作,如拼接…...

JVM在线分析-解决问题的工具一(jinfo,jmap,jstack)

1. jinfo (base) PS C:\Users\zishi\Desktop> jinfo Usage:jinfo <option> <pid>(to connect to a running process)where <option> is one of:-flag <name> to print the value of the named VM flag #输出对应名称的参数-flag [|-]<n…...

[深度学习]不平衡样本的loss

不平衡样本的loss ”softmax“、”weighted softmax“、”focal“、”class-balanced“ 和 ”balanced softmax“ 都是用于多类分类任务的损失函数。它们之间的区别在于如何处理类别不均衡的问题。 Softmax 是常用的多类分类损失函数。它将输出分布转换为概率分布&#xff0c…...

【MySQL】表的增删改查(强化)

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《MySQL》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&a…...

MyBatis-Plus--在xml中使用wrapper的方法

原文网址&#xff1a;MyBatis-Plus--在xml中使用wrapper的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MyBatis-Plus如何在xml中使用wrapper。 Service QueryWrapper<T> wrapper new QueryWrapper<T>(); wrapper.eq("r.room_id", vo.getRoomId())…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...