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

Arthas调试线上代码技巧

1、Arthas概述


官网地址:https://arthas.aliyun.com/

下载地址:https://arthas.aliyun.com/arthas-boot.jar

使用教程:https://arthas.aliyun.com/doc/quick-start.html

Arthas(阿尔萨斯)是 Alibaba 开源的一款Java诊断工具,它能够在不修改应用程序代码的情况下,对业务问题进行定位和诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

image-20241031141808149

当你遇到以下类似问题而束手无策时,Arthas可以帮你解决:1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception2. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?3. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?4. 有什么办法可以监控到 JVM 的实时运行状态?5. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!6. 怎样直接从 JVM 内查找某个类的实例?7. 是否有一个全局视角来查看系统的运行状况?8. 怎么快速定位应用的热点,生成火焰图?常用命令: dashboard:查看实时数据面板dump: 将jvm运行的class字节码保存到指定目录(需要指定类的全限定名)jad: 将jvm运行的class字节码反编译成源码(需要指定类的全限定名)

2、下载&安装


# 下载arthas jar包
curl -O https://arthas.aliyun.com/arthas-boot.jar# 启动arthas
java -jar arthas-boot.jar

image-20241020052121067


3、Arthas快速入门


1、在idea中运行我们的测试程序

package cn.z3inc.demo;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;/*** 死循环获取时间** @author 白豆五* @date 2023/10/15* @since JDK8*/
public class Demo {public static void main(String[] args) throws InterruptedException {while (true) {LocalDateTime now = LocalDateTime.now();  // 获取当前日期时间DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 配置时间格式String time = now.format(formatter); // 格式化时间System.out.println("当前时间:" + time);Thread.sleep(1000);}}
}

image-20241031142403820

2、以jar包方式启动arthas

java -jar arthas-boot.jar

image-20241031142422091

3、输入进程前面的编号,并按回车键,进入程序的内部

image-20241031142435566

4、使用dashboard命令,查看当前系统的实时数据面板

相关参数:

  • -i 刷新实时数据的时间间隔 (ms),默认是5000ms
  • -n 刷新实时数据的次数
# 查看当前系统的实时数据面板,每隔2秒刷新一次,只执行1次结束
dashboard -i 2000 -n 1

image-20241031142505028

5、使用dump命令,将class字节码保存到d盘(类名支持表达式匹配)

相关参数:

  • -d: 设置class文件的保存位置
  • -c:类所属 ClassLoader 的 hashcode
  • --classLoaderClass:指定执行表达式的 ClassLoader 的 class name
dump -d D:/jvm/data/ cn.z3inc.demo.Demo

image-20241031142523704

image-20241031142527909

6、使用jad命令,将运行中的字节码反编译成源码(全限定类名)

jad cn.z3inc.demo.Demo

image-20241031142551958

4、Arthas命令整理


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

4.1、查看实时面板

dashboard:当前系统的实时数据面

img


4.2、反编译代码

jad:反编译代码(将jvm中运行的class文件 => java代码)

//反编指定类:  jad 全限定类名  --lineNumber false ( --lineNumber false 不显示行号)
//反编指定类的方法:  jad 全限定类名 方法名  --lineNumber false ( --lineNumber false 不显示行号)
jad org.dromara.report.service.impl.DataSourceServiceImpl --lineNumber false
jad org.dromara.report.service.impl.DataSourceServiceImpl testConnection --lineNumber false

image-20241031144417836

4.3、监控方法执行

watch:监控方法的执行情况。可观测范围为:返回值抛出异常入参。通过编写 OGNL 表达式进行对应变量的查看。

watch 全限定类名 方法名 "{params,returnObj,throwExp}" -n 5 -x 3watch org.dromara.report.service.impl.DataSourceServiceImpl testConnection "{params,returnObj,throwExp}" -n 5 -x 3

相关文章:

Arthas调试线上代码技巧

1、Arthas概述 官网地址:https://arthas.aliyun.com/ 下载地址:https://arthas.aliyun.com/arthas-boot.jar 使用教程:https://arthas.aliyun.com/doc/quick-start.html Arthas(阿尔萨斯)是 Alibaba 开源的一款Java诊断…...

QT访问数据库:应用提示Driver not loaded

在QT中运行完全正确错误截图 解决办法1 我用的是MySQL。我把libmysql.dll复制到应用程序的目录下&#xff0c;即可正常访问数据库。 解决办法2 bool open_work_db() {QString info "support drivers:";for (int i0; i<QSqlDatabase::drivers().size(); i){inf…...

支持ANC的头戴式蓝牙耳机,更有小金标认证,QCY H3 Pro体验

平时听音乐、看视频&#xff0c;大家都想获得更悦耳的音质体验&#xff0c;这时候蓝牙耳机就是性价比更高的一种方案&#xff0c;同时因其无线束缚、便携性高的特点&#xff0c;随时拿出来就能用。更不用说如今国产品牌的蓝牙耳机升级迭代速度非常快&#xff0c;百元的价位就可…...

net framework 3.5组件更新失败错误代码0x80072f8f怎样解决

浏览器地址栏输入www.dnz9.com远程解决netframework问题 当遇到.NET Framework 3.5 组件更新失败&#xff0c;错误代码为 0x80072f8f 时&#xff0c;可以尝试以下几种解决方法&#xff1a; 一、检查网络连接和时间设置 网络连接 错误代码 0x80072f8f 通常与网络相关问题有关。首…...

C语言初阶:十一.代码调试技巧

❤欢迎各位大佬访问&#xff1a;折枝寄北-CSDN博客折枝寄北擅长C语言初阶,等方面的知识,折枝寄北关注python,c,java,qt,c语言领域.https://blog.csdn.net/2303_80170533?typeblog❤文章所属专栏https://blog.csdn.net/2303_80170533/category_12794764.html?spm1001.2014.300…...

Jenkins Pipeline 部署总结

Jenkins Pipeline 部署总结 前言 Jenkins Pipeline 是 Jenkins 提供的一套强大的工作流框架&#xff0c;它允许开发者以代码的形式定义整个软件交付过程&#xff0c;从而实现持续集成和持续部署&#xff08;CI/CD&#xff09;。通过 Pipeline&#xff0c;原本独立运行于单个或…...

HTTP的初步了解

目录 前言 一、HTTP协议的基本概念 1.1、请求格式 1.2、响应格式 二、HTTP链接问题 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; HTTP协议是超文本传输协议 HTTP的短连接&#xff1a;建立连接——数据传输——关闭连接 HTTP的长连接&#xff1a;…...

SM单元 硬件

在硬件上&#xff0c;SM&#xff08;Streaming Multiprocessor&#xff09;指的是流式多处理器单元&#xff0c;它是GPU架构中非常重要的组成部分。SM可以看作是GPU的心脏&#xff0c;类似于CPU核心&#xff0c;负责执行并行计算任务。每个SM包含多个流处理器&#xff08;cores…...

如何从CSV、JSON等格式创建DataFrame

在Spark中&#xff0c;你可以使用 SparkSession 从CSV和JSON等格式创建 DataFrame。以下是如何从这两种格式创建 DataFrame 的示例。 1. 从CSV文件创建DataFrame scala// 创建SparkSessionval spark SparkSession.builder().appName("CSV to DataFrame").getOrCrea…...

Java避坑案例 - 线程池错误的混用引发的性能故障分析

文章目录 问题现象问题分析问题修复线程池的混用策略任务类型与线程池配置最佳实践 问题现象 代码使用了线程池异步处理一些内存中的数据&#xff0c;但通过监控发现处理得非常慢&#xff0c;整个处理过程都是内存中的计算不涉及 IO 操作&#xff0c;也需要数秒的处理时间&…...

七种方法助你找到实用且免费的API服务

随着现代互联网的迅猛发展&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为推动技术创新的核心工具。API使得开发者能够快速实现复杂的功能&#xff0c;如数据分析、自然语言处理、图像识别等&#xff0c;而无需从头编写大量的代码。在这个开放的生态中&#xf…...

leetcode-74-搜索二维矩阵

题解&#xff1a; 遍历二维数组matrix中的每个list&#xff0c;如果target在list中则返回True&#xff08;退出循环&#xff09;&#xff1b;如果全部遍历完还没有出现target则返回False。 核心就是在list中查找target&#xff01; 代码实现&#xff1a;...

122.WEB渗透测试-信息收集-ARL(13)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;121.WEB渗透测试-信息收集-ARL&#xff08;12&#xff09; 输入命令&#xff1a; docker…...

动态规划 —— 路径问题-下降路径最小和

1. 下降路径最小和 题目链接&#xff1a; 931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示&#xff1a;以莫一个位置位置为结尾 dp[i&#xff0c;j]表示&#xff1a;到…...

【Linux网络】TCP_Socket

目录 TCP协议&#xff08;传输控制协议&#xff09; listen状态 accept和connect TCP_echo_server (1)创建套接字 &#xff08;2&#xff09;绑定 &#xff08;3&#xff09;设置listen状态 &#xff08;4&#xff09;loop &#xff08;5&#xff09;客户端 多线程远程…...

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持视频投放在电视墙上

在当今智能化、数字化的时代&#xff0c;视频监控已经成为各行各业不可或缺的一部分&#xff0c;无论是公共安全、交通管理、企业监控还是智慧城市建设&#xff0c;都离不开高效、稳定的视频监控系统的支持。而在这些应用场景中&#xff0c;将监控视频实时投放到大屏幕电视墙上…...

Springboot集成阿里云通义千问(灵积模型)

我这里集成后&#xff0c;做成了一个工具jar包&#xff0c;如果有不同方式的&#xff0c;欢迎大家讨论&#xff0c;共同进步。 集成限制&#xff1a; 1、灵积模型有QPM(QPS)限制&#xff0c;每个模型不一样&#xff0c;需要根据每个模型适配 集成开发思路&#xff1a; 因有…...

微信公众号(或微信浏览器)获取openId(网页授权)

下单支付需要openId 首先授权去拿到code --然后调用后太换取openId 1.去拿取code 下图中执行到window.location.href &#xff08; redirect_uri 传入当前路径-&#xff09;–执行后重新跳转到当前页面–但是路径上会带上code参数 //然后调用后台方法–将code传给后台得到 o…...

C++算法第五天

本篇文章继续和大家一起刷算法题 第一题 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 题目解析 题目要求&#xff1a; 这是一个连续的子数组 计算子数组内元素的和&#xff0c;若数组内元素的和符合 > target的值并且该子数组的长度是最短的&#xff0c;则返回…...

牛客网剑指Offer-树篇-JZ26 树的子结构

题目 来源&#xff1a;JZ26 树的子结构 描述 输入两棵二叉树A&#xff0c;B&#xff0c;判断B是不是A的子结构。&#xff08;我们约定空树不是任意一个树的子结构&#xff09; 假如给定A为{8,8,7,9,2,#,#,#,#,4,7}&#xff0c;B为{8,9,2}&#xff0c;2个树的结构如下&#xff…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...