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诊断工具,它能够在不修改应用程序代码的情况下,对业务问题进行定位和诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

当你遇到以下类似问题而束手无策时,Arthas可以帮你解决:1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?2. 遇到问题无法在线上 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

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);}}
}

2、以jar包方式启动arthas
java -jar arthas-boot.jar

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

4、使用dashboard命令,查看当前系统的实时数据面板
相关参数:
-i刷新实时数据的时间间隔 (ms),默认是5000ms-n刷新实时数据的次数
# 查看当前系统的实时数据面板,每隔2秒刷新一次,只执行1次结束
dashboard -i 2000 -n 1

5、使用dump命令,将class字节码保存到d盘(类名支持表达式匹配)
相关参数:
-d: 设置class文件的保存位置-c:类所属 ClassLoader 的 hashcode--classLoaderClass:指定执行表达式的 ClassLoader 的 class name
dump -d D:/jvm/data/ cn.z3inc.demo.Demo


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

4、Arthas命令整理
文档:https://arthas.aliyun.com/doc/commands.html
4.1、查看实时面板
dashboard:当前系统的实时数据面

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

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复制到应用程序的目录下,即可正常访问数据库。 解决办法2 bool open_work_db() {QString info "support drivers:";for (int i0; i<QSqlDatabase::drivers().size(); i){inf…...
支持ANC的头戴式蓝牙耳机,更有小金标认证,QCY H3 Pro体验
平时听音乐、看视频,大家都想获得更悦耳的音质体验,这时候蓝牙耳机就是性价比更高的一种方案,同时因其无线束缚、便携性高的特点,随时拿出来就能用。更不用说如今国产品牌的蓝牙耳机升级迭代速度非常快,百元的价位就可…...
net framework 3.5组件更新失败错误代码0x80072f8f怎样解决
浏览器地址栏输入www.dnz9.com远程解决netframework问题 当遇到.NET Framework 3.5 组件更新失败,错误代码为 0x80072f8f 时,可以尝试以下几种解决方法: 一、检查网络连接和时间设置 网络连接 错误代码 0x80072f8f 通常与网络相关问题有关。首…...
C语言初阶:十一.代码调试技巧
❤欢迎各位大佬访问:折枝寄北-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 提供的一套强大的工作流框架,它允许开发者以代码的形式定义整个软件交付过程,从而实现持续集成和持续部署(CI/CD)。通过 Pipeline,原本独立运行于单个或…...
HTTP的初步了解
目录 前言 一、HTTP协议的基本概念 1.1、请求格式 1.2、响应格式 二、HTTP链接问题 前言 提示:这里可以添加本文要记录的大概内容: HTTP协议是超文本传输协议 HTTP的短连接:建立连接——数据传输——关闭连接 HTTP的长连接:…...
SM单元 硬件
在硬件上,SM(Streaming Multiprocessor)指的是流式多处理器单元,它是GPU架构中非常重要的组成部分。SM可以看作是GPU的心脏,类似于CPU核心,负责执行并行计算任务。每个SM包含多个流处理器(cores…...
如何从CSV、JSON等格式创建DataFrame
在Spark中,你可以使用 SparkSession 从CSV和JSON等格式创建 DataFrame。以下是如何从这两种格式创建 DataFrame 的示例。 1. 从CSV文件创建DataFrame scala// 创建SparkSessionval spark SparkSession.builder().appName("CSV to DataFrame").getOrCrea…...
Java避坑案例 - 线程池错误的混用引发的性能故障分析
文章目录 问题现象问题分析问题修复线程池的混用策略任务类型与线程池配置最佳实践 问题现象 代码使用了线程池异步处理一些内存中的数据,但通过监控发现处理得非常慢,整个处理过程都是内存中的计算不涉及 IO 操作,也需要数秒的处理时间&…...
七种方法助你找到实用且免费的API服务
随着现代互联网的迅猛发展,API(应用程序编程接口)已成为推动技术创新的核心工具。API使得开发者能够快速实现复杂的功能,如数据分析、自然语言处理、图像识别等,而无需从头编写大量的代码。在这个开放的生态中…...
leetcode-74-搜索二维矩阵
题解: 遍历二维数组matrix中的每个list,如果target在list中则返回True(退出循环);如果全部遍历完还没有出现target则返回False。 核心就是在list中查找target! 代码实现:...
122.WEB渗透测试-信息收集-ARL(13)
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:121.WEB渗透测试-信息收集-ARL(12) 输入命令: docker…...
动态规划 —— 路径问题-下降路径最小和
1. 下降路径最小和 题目链接: 931. 下降路径最小和 - 力扣(LeetCode)https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示:以莫一个位置位置为结尾 dp[i,j]表示:到…...
【Linux网络】TCP_Socket
目录 TCP协议(传输控制协议) listen状态 accept和connect TCP_echo_server (1)创建套接字 (2)绑定 (3)设置listen状态 (4)loop (5)客户端 多线程远程…...
NVR批量管理软件/平台EasyNVR多个NVR同时管理支持视频投放在电视墙上
在当今智能化、数字化的时代,视频监控已经成为各行各业不可或缺的一部分,无论是公共安全、交通管理、企业监控还是智慧城市建设,都离不开高效、稳定的视频监控系统的支持。而在这些应用场景中,将监控视频实时投放到大屏幕电视墙上…...
Springboot集成阿里云通义千问(灵积模型)
我这里集成后,做成了一个工具jar包,如果有不同方式的,欢迎大家讨论,共同进步。 集成限制: 1、灵积模型有QPM(QPS)限制,每个模型不一样,需要根据每个模型适配 集成开发思路: 因有…...
微信公众号(或微信浏览器)获取openId(网页授权)
下单支付需要openId 首先授权去拿到code --然后调用后太换取openId 1.去拿取code 下图中执行到window.location.href ( redirect_uri 传入当前路径-)–执行后重新跳转到当前页面–但是路径上会带上code参数 //然后调用后台方法–将code传给后台得到 o…...
C++算法第五天
本篇文章继续和大家一起刷算法题 第一题 题目链接 . - 力扣(LeetCode) 题目解析 题目要求: 这是一个连续的子数组 计算子数组内元素的和,若数组内元素的和符合 > target的值并且该子数组的长度是最短的,则返回…...
牛客网剑指Offer-树篇-JZ26 树的子结构
题目 来源:JZ26 树的子结构 描述 输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构) 假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下ÿ…...
2026年强烈建议收藏:八大热门AI编程工具权威评测
AI编程工具已全面进入智能体时代,从单一代码补全进化为全流程开发引擎。本文精选8款全球主流工具,从核心能力、场景适配、使用体验等维度客观解析,为开发者提供精准选型参考。 一、Trae(字节跳动旗下)—— 全链路AI原生…...
AXI协议深度解析:从握手到低功耗,一次搞懂芯片内部数据流的那些“潜规则”
AXI协议深度解析:从握手到低功耗,一次搞懂芯片内部数据流的那些“潜规则” 在当今高性能计算和复杂SoC设计中,AXI协议已成为连接处理器、存储器和外设的黄金标准。但真正理解AXI的精髓,远不止于掌握基础操作——那些隐藏在规范字里…...
3分钟搞定浏览器二维码:Chrome QRCode插件的终极使用秘籍
3分钟搞定浏览器二维码:Chrome QRCode插件的终极使用秘籍 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件,用于生成当前URL或者选中内容的二维码&#…...
数字信号控制器(DSC)在汽车电子中的关键技术解析
1. 数字信号控制器的技术演进与核心定位在嵌入式控制领域,我们正见证着一场处理器架构的静默革命。十年前当我第一次接触到Motorola 56F8300系列芯片时,就意识到这种融合了MCU和DSP特性的混合架构将彻底改变机电控制系统的设计范式。数字信号控制器&…...
为Odoo ERP构建安全的AI数据访问层:基于权限治理的语义查询实践
1. 项目概述:为Odoo ERP构建一个受治理的AI数据访问层如果你正在使用Odoo管理企业业务,同时又希望让AI助手(比如Claude、Cursor)能够安全地查询销售数据、分析库存状况,而不是让它们直接面对你的生产数据库写SQL&#…...
从零到一:基于C#与ArcGIS二次开发构建迎风面指数计算插件实战
1. 环境准备与工具搭建 第一次接触ArcGIS二次开发时,我被官方文档里密密麻麻的API吓得不轻。后来发现只要配好环境,开发插件比想象中简单得多。你需要准备三样东西:Visual Studio(建议2019或2022社区版)、ArcGIS Desk…...
WeChatMsg:如何用开源工具构建你的个人数字记忆库
WeChatMsg:如何用开源工具构建你的个人数字记忆库 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg…...
Muse:现代化多仓库管理工具,提升开发效率与协作体验
1. 项目概述:一个面向开发者的现代化代码库管理工具最近在和一些团队交流时,发现一个挺普遍的现象:大家手头的项目代码库越来越多,有的是自己维护的开源项目,有的是公司内部的核心业务模块,还有一堆实验性的…...
Word转Markdown踩过的那些坑:Writage插件失效、Pandoc命令报错怎么办?
Word转Markdown实战避坑指南:从工具失效到完美转换的完整方案 每次技术分享会上,总有人问我:"为什么我的Word转Markdown总出问题?"这让我想起自己刚接触文档转换时踩过的无数坑——插件神秘消失、命令行报错、格式全乱套…...
长裕集团上交所上市:大涨562%市值375亿 年营收18亿净利2.6亿
雷递网 雷建平 5月11日 长裕控股集团股份有限公司(简称:“长裕集团”,股票代码:“603407”)今日在上交所主板上市。长裕集团发行价为13.86元,发行4100万股,募资总额为5.68亿元。长裕集团今日开盘…...
