Arthas这种怎么解决问题呢?

Arthas这种怎么解决问题呢?lQLPKeP5CuboXPvNA2DNCOywwV3xoHwCRhgFdHAv8-hGAA_2284_864.png

展开
收起
三分钟热度的鱼 2023-12-28 19:04:24 169 分享 版权
阿里云 AI 助理回答

Arthas 是一种强大的 Java 应用诊断工具,能够帮助开发者快速定位和解决线上问题。以下是使用 Arthas 解决问题的具体方法和步骤:


1. 问题定位与分析

Arthas 提供了多种命令来帮助用户快速定位问题,主要包括以下几种核心功能:

1.1 查看方法调用路径及耗时

通过 trace 命令,可以查看方法内部的调用路径以及每个节点的耗时,从而定位性能瓶颈。

  • 命令格式
    trace <类路径> <方法名>
    
  • 示例: 如果需要分析 com.example.MyService.process() 方法的调用路径及耗时,可以执行:

    trace com.example.MyService process
    
  • 输出内容

    • 方法调用路径。
    • 每个节点的耗时(包括子方法)。
    • 总耗时。
  • 适用场景:排查慢调用、性能瓶颈等问题。


1.2 观测方法的入参、返回值和异常

通过 watch 命令,可以观测方法的关键处理结果,包括入参、返回值和抛出的异常。

  • 命令格式
    watch <类路径> <方法名> '{params,returnObj,throwExp}' -x <调用深度>
    
  • 示例: 如果需要观察 com.example.MyService.getData() 方法的入参和返回值,可以执行:

    watch com.example.MyService getData '{params,returnObj}' -x 2
    
  • 输出内容

    • 方法的入参(params)。
    • 方法的返回值(returnObj)。
    • 抛出的异常(throwExp)。
  • 适用场景:排查方法逻辑错误、数据异常等问题。


1.3 查看线程状态和堆栈信息

通过 thread 命令,可以查看当前 JVM 中所有线程的状态及其堆栈信息,帮助定位高 CPU 使用率或死锁问题。

  • 命令格式
    thread [线程ID]
    
  • 示例: 查看所有线程的状态:

    thread
    

    查看指定线程的堆栈信息(如线程 ID 为 10 的线程):

    thread 10
    
  • 输出内容

    • 线程 ID、名称、状态。
    • 线程的堆栈信息。
  • 适用场景:排查线程阻塞、死锁、高 CPU 占用等问题。


2. 集成 ARMS 进行增强诊断

ARMS(应用实时监控服务)集成了 Arthas 的功能,并提供了更便捷的操作界面和上下文关联能力,进一步提升问题诊断效率。

2.1 开启 Arthas 诊断功能

在 ARMS 控制台中开启 Arthas 功能,具体步骤如下: 1. 登录 ARMS 控制台,选择目标应用。 2. 在左侧导航栏中选择“应用设置” > “自定义配置”。 3. 打开“Arthas 监控”开关,并根据需要选择是否仅对部分 IP 进行诊断。 4. 点击“保存”。

2.2 查看诊断信息

  1. 在 ARMS 控制台中选择“应用诊断” > “Arthas 诊断”。
  2. 选择待诊断的应用实例,查看诊断信息。
  3. 使用 ARMS 提供的功能模块(如 JVM 概览、线程耗时分析、方法执行分析等)进行问题排查。

  4. 主要功能模块

    • JVM 概览:查看内存使用情况、GC 情况、操作系统信息等。
    • 线程耗时分析:定位耗时较高的线程及其堆栈信息。
    • 方法执行分析:抓取方法的某一次执行记录,包括参数、返回值、异常等。
    • 对象查看器:查看单例对象的实时状态,用于排查应用状态异常问题。
    • 实时看板:查看关键组件(如数据库连接池、HTTP 连接池)的实时状态。
  5. 适用场景:复杂问题的综合诊断,尤其是分布式系统中的链路问题。


3. 常见问题及解决方案

在使用 Arthas 或 ARMS 集成 Arthas 时,可能会遇到一些常见问题,以下是解决方案:

3.1 Arthas 打开后无提示无心跳

  • 原因:可能是网络不通或应用挂载了 SkyWalking 探针。
  • 解决方案
    • 检查网络连通性。
    • 卸载 SkyWalking 探针后重试。

3.2 方法执行分析页签转圈后提示命令执行失败

  • 原因:指定的方法在等待时间内未执行。
  • 解决方案
    • 刷新页面重试。
    • 确保方法被调用后再进行分析。

3.3 Arthas 展示的 Survivor_space 空间为实际值的一半

  • 原因:Survivor_space 分为 from 和 to 两部分,Arthas 只展示了 from 区的大小。
  • 解决方案:无需特殊处理,理解其展示逻辑即可。

3.4 ARMS 控制台开启 Arthas 后,手动挂载提示连接拒绝

  • 原因:ARMS 集成的 Arthas 使用随机端口,可能导致端口冲突。
  • 解决方案:在 ARMS 控制台关闭 Arthas 功能后重试。

3.5 日志提示 Arthas server already bind

  • 原因:应用之前挂载过开源的 Arthas。
  • 解决方案:先删除开源的 Arthas,再开启 ARMS 的 Arthas。

4. 总结

通过 Arthas 的核心命令(如 tracewatchthread 等),结合 ARMS 提供的增强诊断功能,可以高效地解决 Java 应用中的各种问题,包括性能瓶颈、逻辑错误、线程阻塞等。在使用过程中,需注意常见问题的解决方案,以确保诊断过程顺利进行。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

还有其他疑问?
咨询AI助理