Arthas是诊断Java领域线上问题的利器,利用字节码增强技术,可以在不重启JVM进程的情况下,查看程序的运行情况。

前提条件

  • 新开通EDAS的账号或15天内未使用Arthas诊断功能的账号仅支持使用新版Arthas诊断功能。
  • 已接入应用监控。具体操作,请参见应用监控概述

    EDAS新版Arthas诊断仅对以下地域开放。

    地域名称 所在城市 Region ID
    华东1 杭州 cn-hangzhou
    华东2 上海 cn-shanghai
    华北2 北京 cn-beijing
    华北3 张家口 cn-zhangjiakou
    华南1 深圳 cn-shenzhen
  • 应用的编程语言需要为Java。
  • 3658端口未被占用。

背景信息

EDAS提供的Arthas诊断功能主要用于补齐EDAS在实时诊断方面的能力。EDAS的Arthas诊断功能包括以下几种类型:
  • JVM概览:查看当前JVM进程实时的内存使用情况、系统信息、系统变量和环境变量。
  • 线程分析:查看当前JVM进程的线程耗时情况以及指定线程的实时方法栈。
  • 方法执行分析:抓取任意方法(非JDK方法)满足指定条件的一次执行记录,记录该方法的参数、异常、返回值以及方法内部各个方法执行耗时。
  • 对象查看器:查看任意类的某个实例实时的属性取值情况。
  • 实时看板:常见组件的实时看板,例如,Druid连接池的实时看板可以看到连接池的配置、使用情况以及SQL执行耗时情况。

功能入口

  1. 登录EDAS控制台
  2. 按需执行以下任一操作来进入应用的详情页面:
    • 在左侧导航栏选择资源管理 > 容器服务K8s集群(或资源管理 > Serverless K8s集群),在顶部菜单栏选择地域并在页面上方选择微服务空间,在容器服务K8s集群Serverless K8s集群页面单击集群ID,然后在集群详情页面的应用列表区域单击具体应用名称。
    • 在左侧导航栏单击应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,在集群类型下拉列表中选择容器服务/Serverless K8s集群,然后单击目标应用名称。
  3. 在应用详情的左边导航栏中选择监控 > 应用诊断-Arthas诊断
  4. 在Arthas诊断页面,在顶部下拉列表选择待诊断的应用实例。
    • 若该实例的Agent版本未升级到2.7.1.3或以上,页面会提示您需要先升级Agent。
    • 若该实例的Agent版本已升级到2.7.1.3或以上,页面会显示该实例的Arthas诊断信息。

JVM概览

JVM概览支持查看应用的JVM相关信息,包括JVM内存、操作系统信息、变量信息等,帮助您了解JVM的总体情况。

Arthas诊断页面默认显示JVM概览页签,您可以在JVM概览页签查看以下信息:

  • JVM内存:JVM内存的相关信息,包括堆内存使用情况、非堆内存使用情况、GC情况等。JVM内存
  • 操作系统信息:操作系统的相关信息,包括平均负载情况,操作系统名称、操作系统版本、Java版本等。操作系统信息
  • 变量信息:变量的相关信息,包括系统变量和环境变量。变量信息

线程耗时分析

线程耗时分析支持显示该应用的所有线程和查看线程的堆栈信息,帮助您快速定位耗时较高的线程。

  1. 在Arthas诊断页面,单击线程耗时分析页签。
    线程耗时分析页签会实时获取当前JVM进程的线程耗时情况,并将相似线程聚合。新版Arthas诊断-线程耗时分析
  2. 单击线程左侧的+图标展开线程明细,可以查看线程的ID、CPU使用率和状态。
  3. 如需查看目标线程的堆栈信息,您可以在目标线程右侧的操作列,单击查看实时堆栈
    堆栈详情

方法执行分析

方法执行分析支持抓取方法的某一次执行的耗时、入参、返回值等信息和钻入,帮助您快速定位导致慢调用的根本原因,以及问题线下无法复现或日志缺失等场景。

  1. 在Arthas诊断页面,单击方法执行分析页签。
  2. 方法执行分析页签的搜索框中输入类名的关键词,然后单击搜索图标。
  3. 在搜索到的类中选择需要诊断的类,然后在右侧方法选择框选取该类的某个方法,单击确定
    页面将会显示EDAS随机抓取的该方法的某一次执行的信息。新版Arthas诊断-方法执行分析
    • 左侧执行堆栈区域显示诊断方法的内部执行记录。
      • 如需钻入某个内部方法,在其右侧操作列,单击钻入
      • 如需查看方法源码,单击执行堆栈区域顶部的查看方法源码
        如下图所示,每一次内部方法的执行耗时都会以注释的方式显示在源代码中。方法源码
    • 右侧方法执行结果区域显示方法执行的参数值、返回值、异常、成员变量以及此次方法执行的TraceID。
    • 右侧设置执行条件区域执行以下步骤,可以设置方法执行条件来抓取满足条件的方法执行记录。
      1. 选择当前方法中的一个重载方法。
      2. 请选择初始过滤key下拉框选择初始过滤Key的类型,单击向左箭头图标。
        初始过滤Key的类型:
        • params[n]:方法的第n个参数。
        • returnObj:方法的返回值。
        • 方法执行耗时:方法执行的耗时。
        • 是否抛出异常:方法执行时是否抛出异常。
        说明 如果选取的初始过滤Key为嵌套类型,则还需要继续选择该嵌套类型的内部字段,直到选择字段为基础类型。
      3. 选择过滤条件。
      4. 输入过滤值。
      5. 单击添加

        当前过滤条件区域会显示已添加的过滤条件。

        设置执行条件
      6. 在左侧执行堆栈区域右上角单击刷新图标,系统会按照设置的条件重新抓取一次方法执行。

对象查看器

对象查看器用于查看一些单例对象当前的状态,用于排查应用状态异常问题,例如应用配置、黑白名单、成员变量等。

  1. 在Arthas诊断页面,单击对象查看器页签。
  2. 对象查看器页签的搜索框中输入类名的关键词,然后单击搜索图标。
  3. 在搜索到的类中选择需要诊断的类,然后在右侧实例选择框选择该类的某个实例,单击确定
    页面则会显示该实例中当前字段的实时取值。Arthas诊断-对象查看器
    • 对于简单类型的字段,在左侧对象字段实时取值区域的详情列会是字段的取值。
    • 对于复制类型的字段,在左侧对象字段实时取值区域的详情列单击点击查看详情,在右侧字段详情区域查看字段取值详情。

      字段详情区域仅支持将复杂类型字段反序列化一层进行展示,如果需要查看更具体的数据,单击点击查看字段更详细的数据。

实时看板

实时看板用于查看系统中用到的关键组件的实时状态,例如查看数据库连接池的使用情况、HTTP连接池的使用情况等,有利于排查资源类型的问题。

  1. 在Arthas诊断页面,单击实时看板页签。
  2. 实时看板页签的下拉列表中选择一个看板,然后在右侧实例选择框选择该看板的一个实例,单击添加到看板
    页面显示该看板的实时情况。如下图显示为一个Druid连接池的实时状态信息,包括基础配置、连接池状态、执行耗时分布等。Arthas诊断-实时看板