做网站大概费用,可视化编辑网站开发,百度ai搜索引擎,网站建设方案企业文章目录 前言一、介绍1.1 功能1.2 原理 二、安装使用2.1 下载2.2 使用 三、常用3.1 实时查看3.2 追踪查看3.3 辅助命令3.4 热更新3.5 监控 四、实战4.1 CPU/内存占用过高4.2 接口耗时高4.3 找到类所在jar4.4 查找类的实例4.5 生成火焰图 参考 前言
在现代软件开发中#xff… 文章目录 前言一、介绍1.1 功能1.2 原理 二、安装使用2.1 下载2.2 使用 三、常用3.1 实时查看3.2 追踪查看3.3 辅助命令3.4 热更新3.5 监控 四、实战4.1 CPU/内存占用过高4.2 接口耗时高4.3 找到类所在jar4.4 查找类的实例4.5 生成火焰图 参考 前言
在现代软件开发中应用程序的监控和调试是非常重要的环节。特别是在复杂的 Java 应用程序中排查问题、优化性能和定位异常往往成为开发者的一项挑战。针对这个问题阿里巴巴开发了一款强大而灵活的 Java 诊断工具名为 Arthas 。
Arthas 框架被誉为Java开发者的神器它旨在帮助开发者实时监控和深入调试 Java 应用程序提供了丰富的功能和便捷的操作。无论是在开发、测试还是生产环境中Arthas 都能够以低侵入性的方式提供全面的应用程序观测和问题诊断能力。
github https://github.com/alibaba/arthas官网https://arthas.aliyun.com/
Arthas支持 JDK 6支持 Linux/Mac/Windows 采用命令行交互模式同时提供丰富的 Tab 自动补全功能进一步方便进行问题的定位和诊断当你遇到以下类似问题而束手无策时Arthas可以帮助你解决
这个类从哪个 jar 包加载的为什么会报各种类相关的 Exception我改的代码为什么没有执行到难道是我没 commit分支搞错了遇到问题无法在线上 debug难道只能通过加日志再重新发布吗线上遇到某个用户的数据处理有问题但线上同样无法 debug线下无法重现是否有一个全局视角来查看系统的运行状况有什么办法可以监控到 JVM 的实时运行状态怎么快速定位应用的热点生成火焰图怎样直接从 JVM 内查找某个类的实例
在本篇博文中我们将全面介绍 Arthas 框架的基本概念和原理详细探讨 Arthas 的常用操作以及如何使用它进行监控和调试。我们还将给出一些实际应用场景的示例让读者能够更好地理解和运用 Arthas 来提升自己的 Java 开发调试能力。
一、介绍
1.1 功能
监控ObservabilityArthas 提供了实时监控 Java 应用程序运行状态和性能的功能。通过监控开发者能够获得关键的运行指标如方法调用、线程状态、堆栈跟踪等从而可以全面了解应用程序的运行情况。诊断DiagnosisArthas 支持深入调试和诊断Java应用程序帮助开发者定位和解决问题。开发者可以通过 Arthas 提供的命令行界面进行方法追踪、变量修改、热替换等操作以便更好地理解代码执行过程和解决潜在的问题。命令行界面Command-line InterfaceArthas 使用简洁而强大的命令行界面来操作和控制监控和诊断功能。开发者可以通过在命令行中输入特定的命令来获取所需的监控数据、执行诊断操作或配置监控规则等。这种命令行交互的方式使得 Arthas 对于开发者来说非常方便和灵活。
总而言之Arthas框架基于监控和诊断的概念通过命令行界面提供了实时监控和深入调试 Java 应用程序的能力。
1.2 原理 基于Java的 Instrumentation 机制和字节码增强技术 Instrumentation 是 Java SE 5 引入的一个功能强大的 API它允许开发者在运行时修改、替换或者重新定义字节码而不用修改源代码。 Arthas利用Java的Instrumentation API在目标应用程序的启动过程中动态加载字节码增强器。 字节码增强器负责对目标应用程序的类进行字节码修改和增强。 目标应用程序的运行时监控和诊断 Arthas的字节码增强器根据监控规则和命令行输入的指令在目标应用程序的方法中插入自定义的代码逻辑。插入的代码逻辑会在方法调用前后、异常抛出等关键点触发实现对目标应用程序的监控和诊断。 动态代理技术 Arthas利用 Java 的动态代理技术对目标对象进行包装以便在方法执行前后添加额外的逻辑。这样Arthas 可以实现对目标对象的监控和诊断无需修改目标对象的源代码。
Arthas的核心原理是利用Java的Instrumentation机制和字节码增强技术在 目标应用程序运行时动态地修改和增强其字节码从而实现对目标应用程序的监控和诊断功能。这种低侵入性的设计使得Arthas可以在不停止应用程序的情况下对其进行实时监控和调试极大地提高了开发者的效率和调试能力。
二、安装使用
2.1 下载
curl -O https://arthas.aliyun.com/arthas-boot.jar上面jar包第一次启动后会接着下载所需依赖包如果不成功可直接在github上下载完整包
2.2 使用
使用和目标进程一致的用户启动否则可能 attach 失败
java -jar arthas-boot.jar进入命令行界面需要选择想追踪的 java 进程 三、常用
3.1 实时查看
通过Arthas进行全局 JVM线程方法调用和堆栈跟踪分析 使用dashboard 实时查看全局 JVM 获取实时线程的信息 thread 1 #找到主线程thread -n 3 # 找到当前最忙的3个线程thread -b # 找出当前阻塞其他线程的线程,只支持找出 synchronized 关键字阻塞住的线程thread --state # 查看指定状态的线程在所有匹配的方法调用处打印方法参数、返回值和执行时间等信息。 trace demo.MathGame run
trace com.example.MyClass *watch 对函数执行数据观测让你能方便的观察到指定函数的调用情况。能观察到的范围为返回值、抛出异常、入参通过编写 OGNL 表达式进行对应变量的查看。 4 个观察事件点即 -b 函数调用前-e 函数异常后-s 函数返回后-f 函数结束后(默认) # 查看运行方法超时的参数和返回结果
watch demo.MathGame primeFactors {params, returnObj} #cost0.03 -n 13.2 追踪查看 watch 虽然很方便和灵活但需要提前想清楚观察表达式的拼写这对排查问题而言要求太高因为很多时候我们并不清楚问题出自于何方只能靠蛛丝马迹进行猜测这时tt 就可以发挥作用了它能记录下当时方法调用的所有入参和返回值、抛出的异常 可以通过tt -t 记录所有运行得方法找到自己想要的然后通过tt -i [index]查看具体参数如果参数比较复杂还可以通过-w 通过ognl表达式访问 tt -t demo.MathGame primeFactors
tt -i 1008
tt -i 1008 -w params[0].obj字段含义IS-RET方法是否以正常返回的形式结束IS-EXP方法是否以抛异常的形式结束
3.3 辅助命令 强制GC vmtool --action forceGc重载方法 有时匹配方法会碰到重载方法可通过下面OGNL表达式挑选 params.length 参数个数 params[0] instanceof java.lang.String3.4 热更新
展示 Arthas 如何实现无需重启应用程序而进行热更新
retransform /path/to/new/class/file
# 显示替换的类
retransform -l
# 根据id删除
retransform -d 1注意:
不允许新增加 field/method正在跑的函数没有退出不能生效应该谨慎使用热更新避免对系统稳定性和安全性产生负面影响
3.5 监控
使用monitor命令
# c 统计周期默认值为 120 秒
monitor -c 5 demo.MathGame primeFactors params[0] 2监控项说明timestamp时间戳classJava 类method方法构造方法、普通方法total调用次数success成功次数fail失败次数rt平均 RTfail-rate失败率
Arthas的监控功能灵活而强大可以帮助开发人员及时发现和解决系统性能或行为问题。但需要注意的是监控需要消耗一定的系统资源因此应该合理设置监控规则避免对系统产生额外的负担。
四、实战
4.1 CPU/内存占用过高
用 dashboard 查看占用CPU最高的线程名字然后通过 thread ID 查看具体线程信息如果dashboard 面板的堆栈空间内存占用过多可通过heapdump heapdump.hprof导出dump文件用MAT 或 jvisualvm 查看
4.2 接口耗时高
可通过trace demo.MathGame primeFactors 对应接口相关类和方法追踪还可以通过trace demo.MathGame primeFactors #cost 100 将筛选耗时 100ms 的方法
4.3 找到类所在jar
使用sc -d命令使用以下命令进行类的查找 sc -d className其中className为待查找的类的全限定名例如demo.MathGame。 查看结果Arthas会输出类的相关信息包括类所在的Jar包路径。在其中找到“code-source”一项即可获得该类所在的Jar包路径。
注意事项
如果类尚未被加载那么无法通过sc -d命令找到类所在的Jar包。如果类存在于多个Jar包中Arthas 将只显示一个匹配。如果需要找到所有匹配的Jar包可以使用sc -d className --deep命令进行深度查找。
4.4 查找类的实例
可以使用vmtool 获取实例
vmtool --action getInstances --className java.lang.String --limit 104.5 生成火焰图
开始采集执行profiler start命令开启性能分析。profiler 执行时间可以根据参数调整如 --duration 10 --interval 500采样周期为500ms持续10秒。 当命令执行完毕后会在output目录下生成html文档包含对应火焰图
此命令不支持windows
profiler start --duration 10 --interval 500参考
https://arthas.aliyun.com/doc/Arthas 看了官方文档还不会用进来了解一哈~