Arthas:Java调试利器使用

news2024/11/17 21:48:13

Arthas:Java调试利器使用

    • 1. Arthas是什么
    • 2. Arthas可以解决什么问题
    • Arthas启动方式
      • 1. jar启动
      • 2. 在线安装
    • 远程连接
    • 命令使用
      • - 退出
      • thread
      • classloader
      • sc
      • sm
    • watch
      • trace
      • 修改日志级别

1. Arthas是什么

Arthas(阿尔萨斯)是阿里开源的一个Java在线分析诊断工具.

2. Arthas可以解决什么问题

  • 分析jar的加载和报错类的异常
  • 类的执行步骤
  • 线上出问题,没有打印日志,
  • 监控JVM的实时运行状态

Arthas启动方式

1. jar启动

wget https://alibaba.github.io/arthas/arthas-boot.jar

java -jar arthas-boot.jar --target-ip 0.0.0.0

使用arthas调试项目,项目服务必须要运行,arthas启动后会自动检测本地所有java服务并列出来,我们只需要按照序号输入想要调试的项目.

2. 在线安装

curl -L https://alibaba.github.io/arthas/install.sh | sh

执行上面的命令会在所在的文件中生成as.sh执行文件
启动

./as.sh PID #进程id 指定JAVA进程id

远程连接

使用Arthas服务的web console必须对外暴露本机地址(线上环境不推荐)

# --target-ip就是Arthas对外暴露的ip
java -jar arthas-boot.jar --target-ip 172.18.205.100
java -jar arthas-boot.jar --telnet-port 9999 --http-port -1

./as.sh --target-ip 0.0.0.0
./as.sh --telnet-port 9999 --http-port -1

访问 172.18.205.100:9999,进入Arthas web控制台.
在这里插入图片描述

命令使用

- 退出

quit 退出当前arthas客户端
exit 通quit
stop 关闭Arthas服务端,所有客户端退出

thread

显示当前java进程的详细信息

# 展示所有的线程列表
thread
thread-all

# cpu使用率采样修改为2s,默认为200ms
thread -i 2000

# 打印出cpu使用率前5的线程详情,即比较繁忙的线程,cpu使用率采样统计方式请参考官方文档说明
thread -n 5

# 打印id为5的线程详情
thread 5

# 根据状态过滤线程数据(NEW, RUNNABLE, TIMED_WAITING, WAITING, BLOCKED, TERMINATED)
thread --state RUNNABLE
thread |grep RUNNABLE

# 列出持有某个锁,阻塞其他线程最多的线程,排查死锁
thread -b

classloader

查看类的加载器信息

# 查看类加载器,及加载信息
classloader

# 查看类加载器hash、parent信息
classloader -l

# 查看类加载器之间的继承树
classloader -t

# 列出所有类加载器及加载的类
classloader -a

# 查看URLClassLoader实际的urls
classloader -c hashcode

sc

查看jvm中某个类的信息

# 模糊匹配类信息,支持正则表达式,如果是接口,还会列出所有的实现类
sc java.lang.String*

# 模糊匹配类信息,限制最多匹配到的数量,默认100
sc java.lang.String* -n 2

# 查看类详情信息
sc -d java.lang.String

# 指定类加载器查看类信息
sc -c hashcode java.lang.String*

# 查看类详情信息,包含field信息
sc -d -f java.lang.String

sm

查看jvm中类的方法

# 查看某个类下所有的方法信息
sm com.zlm.arthasdemo.controller.UController

# 查看某个类下的某个方法信息
sm com.zlm.arthasdemo.controller.UController AllUser

# 查看方法详情
sm -d com.zlm.arthasdemo.controller.UController AllUser

# 指定类加载器查看类下某个方法的详细信息
sm -c hashcode -d com.zlm.arthasdemo.controller.UController AllUser

watch

查看方法的执行详情

# 限制观测执行次数
watch *UserController helloUser -n 2

# 设置观测结果遍历深度
wathch *UserController helloUser -x 2

# 只观测执行成功
watch *UserController helloUser -s

# 只观测执行失败
watch *UserController helloUser -e

# 同时观测方法执行前、方法执行后结果
watch *UserController helloUser -b -f

# 观测方法执行异常时,详细的异常栈信息
watch *UserController helloUser '{throwExp}' -e -x 2

# 观测方法执行时间大于200ms的信息
watch *UserController helloUser '#cost>100'

trace

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

# 观测方法内部调用顺序及耗时
trace com.zlm.arthasdemo.controller.UserController helloUser

# 观测方法内部调用顺序及耗时,只观测3次
trace com.zlm.arthasdemo.controller.UserController helloUser -n 3

# 观测方法内部调用顺序及耗时,包含jdk内部方法
trace com.zlm.arthasdemo.controller.UserController helloUser --skipJDKMethod false

# 限制观测范围,第一个参数长度大于10
trace com.zlm.arthasdemo.controller.UserController helloUser params[0].length>=10

# 限制观测范围,执行耗时大于100ms
trace com.zlm.arthasdemo.controller.UserController helloUser '#cost>100'

# trace 同时多个类的多个方法
trace -E com.test.ClassA|org.test.ClassB method1|method2|method3

修改日志级别

# 查找到具体的类信息
sc -d *UserController

# 使用ognl表达式查看日志属性的信息,判断日志级别
ognl -c classLoaderHash "@com.zlm.arthasdemo.controller.UserController@logger"

# 使用ognl表达式修改日志级别
ognl -c classLoaderHash "@com.zlm.arthasdemo.controller.UserController@logger.setLevel(@ch.qos.logback.classic.Level@DEBUG)"

# 再次查看日志级别,判断是否修改成功
ognl "@com.zlm.arthasdemo.controller.UserController@logger"

# 修改全局日志级别
ognl -c classLoaderHash '@org.slf4j.LoggerFactory@getLogger("root").setLevel(@ch.qos.logback.classic.Level@DEBUG)'

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

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

相关文章

C#(CSharp)入门实践项目(简易回合制游戏)

项目名称 木木夕营救公主 项目介绍 这是一个小游戏,你将扮演一个英雄(木木夕),去打败恶龙,拯救出公主,该项目采用回合制战斗模式,由于角色的血量和攻击为随机数,所以需要靠运气才…

YOLOv7改进:CBAM注意力机制

目录 1.介绍 1.1、论文的出发点 1.2、论文的主要工作 1.3、CBAM模块的具体介绍 2.YOLOv7改进 2.1yaml 配置文件如下 2.2common.py配置 2.3yolo.py配置 1.介绍 1.1、论文的出发点 cnn基于其丰富的表征能力,极大地推动了视觉任务的完成,为了提高…

【MySql】3- 实践篇(一)

文章目录 1. 普通索引和唯一索引的选择1.1 查询过程1.2 更新过程1.2.1 change buffer1.2.2 change buffer 的使用场景 1.3 索引选择和实践1.4 change buffer 和 redo log2. MySQL为何有时会选错索引?2.1 优化器的逻辑2.1.1 扫描行数是怎么判断的?2.1.2 重新统计索引信息 2.2 …

一站式吃鸡利器,提升游戏战斗力,助您稳坐鸡王宝座!

各位吃鸡玩家们,听说过绝地求生作图工具吗?想知道如何提高游戏战斗力、分享顶级作战干货、查询装备皮肤库存?还在为游戏账号安全而担心吗?别急,今天就为您介绍一款一站式吃鸡利器,满足您的所有需求&#xf…

【使用工具】IDEA创建类及已有类添加注释-详细操作

1.背景 很多开发好多时候其实不太会给类添加注释,尤其是已经有的类,上网查询,好多文档错误百出,而且不全 2.正文 2.1新建类添加注释 idea给新建类创建注释有两种方式 先写一个简单的模板 /** * description: TODO * autho…

kotlin协程CoroutineScope Dispatchers.IO launch 线程Id

kotlin协程CoroutineScope Dispatchers.IO launch 线程Id import kotlinx.coroutines.*fun main(args: Array<String>) {println("main 线程id:${Thread.currentThread().threadId()}")CoroutineScope(Dispatchers.IO).launch {println("launch 线程id:$…

【JVM】第二篇 JVM内存模型深度剖析与优化

目录 一. JDK体系结构与跨平台特性介绍二. JVM内存模型深度剖析三. 从Jvisualvm来研究下对象内存流转模型四. GC Root与STW机制五. JVM参数设置通用模型一. JDK体系结构与跨平台特性介绍 二. JVM内存模型深度剖析 按照线程是否共享来划分 TLAB(Thread Local Allocation Buffer…

mybatis核心组件

title: “mybatis核心组件” createTime: 2021-12-08T12:19:5708:00 updateTime: 2021-12-08T12:19:5708:00 draft: false author: “ggball” tags: [“mybatis”] categories: [“java”] description: “mybatis核心组件” #mermaid-svg-AYu4pQutsPsK0P5T {font-family:&quo…

stm32 - 初识2

stm32 - 初识2 工程架构点灯程序寄存器方式点灯库函数的方式点灯 工程架构 启动文件 中断向量表&#xff0c;中断服务函数&#xff0c;其他中断等 中断服务函数中的&#xff0c;复位中断是整个程序的入口&#xff0c;调用systeminit&#xff0c;和main函数 点灯程序 寄存器方式…

自适应阈值分割-OTSU

OTSU 在前面固定阈值中选取了一个阈值为127进行阈值分割&#xff0c;那如何知道选的这个阈值效果好不好呢&#xff1f;答案是&#xff1a;不断尝试&#xff0c;所以这种方法在很多文献中都被称为经验阈值。 Otsu阈值法就提供了一种自动高效的二值化方法。Otsu算法也称最大类间…

C++之std::atomic类模板原子操作应用总结(二百三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

JAVA+SpringBoot+VUE工厂车间管理系统(含论文)源码

springboot169基于vue的工厂车间管理系统的设计录像(毕业设计jdz2023) 一、源码描述 JAVASpringBootVUE工厂车间管理系统,包含源码数据库论文等,含MySQL脚本&#xff0c;基于B/S和Web开发的&#xff0c;感兴趣的朋友可以下载看看 二、功能介绍 1、个人中心 2、人员管理 3、设备…

计算机图像处理:图像轮廓

图像轮廓 图像阈值分割主要是针对图片的背景和前景进行分离&#xff0c;而图像轮廓也是图像中非常重要的一个特征信息&#xff0c;通过对图像轮廓的操作&#xff0c;就能获取目标图像的大小、位置、方向等信息。画出图像轮廓的基本思路是&#xff1a;先用阈值分割划分为两类图…

Textpad 缺少Java编译和运行功能

一、问题 缺少Java编译和运行功能 二、处理方法 1、点击菜单Configure->Preferences 2、点击 Tools -> Add -> Java SDK Commands 3、点击应用和确认 三、结果

现代 GPU 容易受到新 GPU.zip 侧通道攻击

来自四所美国大学的研究人员开发了一种新的 GPU 侧通道攻击&#xff0c;该攻击利用数据压缩在访问网页时泄露现代显卡中的敏感视觉数据。 研究人员通过 Chrome 浏览器执行跨源 SVG 过滤器像素窃取攻击&#xff0c;证明了这种“ GPU.zip ”攻击的有效性。 研究人员于 2023 年 …

【JVM】第五篇 垃圾收集器G1和ZGC详解

导航 一. G1垃圾收集算法详解1. 大对象Humongous说明2. G1收集器执行一次GC运行的过程步骤3. G1垃圾收集分类4. G1垃圾收集器参数设置5. G1垃圾收集器的优化建议6. 适合使用G1垃圾收集器的场景?二. ZGC垃圾收集器详解1. NUMA与UMA2. 颜色指针3. ZGC的运作过程4. ZGC垃圾收集器…

mysql面试题2:说一说MySQL的架构设计?一条 MySQL 语句执行的步骤?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说MySQL的架构设计? MySQL的架构设计主要包括以下几个组件: 连接器(Connector):负责与客户端建立连接,并进行身份验证和授权。 查询缓存…

文件的随机读写函数:fseek

目录 函数介绍&#xff1a; fseek&#xff1a; 原型&#xff1a; 参数说明&#xff1a; int origin&#xff1a; 举例&#xff1a; 文件内容展示&#xff1a; 正常的使用fgetc函数&#xff1a; 结果&#xff1a; 使用了fseek之后&#xff1a; SEEK_SET :从开始位置进行…

VBA技术资料MF60:从二维变体数组中删除一列数据

【分享成果&#xff0c;随喜正能量】如果一个人能看破红尘&#xff0c;特别是如果能看破贪欲的本质&#xff0c;他的身心一定会非常自在&#xff0c;外在的气色会很好&#xff0c;内心也会非常安乐。如果一个人总是贪执某人&#xff0c;那他的戒律肯定不会清净&#xff0c;他的…

渗透测试之打点

请遵守中华人民共和国网络安全法 打点的目的是获取一个服务器的控制权限 1. 企业架构收集 &#xff08;1&#xff09;官网 &#xff08;2&#xff09;网站或下属的子网站&#xff0c;依次往下 天眼查 企查查 2. ICP 备案查询 ICP/IP地址/域名信息备案管理系统 使用网站…