Arthas是诊断Java领域线上问题的利器,利用字节码增强技术,可以在不重启JVM进程的情况下,查看程序的运行情况。EDAS白屏化支持Arthas的常用功能,包括JVM概览、线程耗时分析、方法执行分析和性能分析。
前提条件
要使用Arthas诊断的应用必须满足以下条件:- 部署环境为EDAS K8s环境。说明 本文以容器服务Kubernetes版为例。
- 编程语言为Java。
- 3658端口和8563端口未被占用。
背景信息
Arthas是一款开源Java诊断工具,深受开发者欢迎。关于Arthas的更多信息,请参见Arthas官网。
升级arms-pilot并重启应用
在使用Arthas诊断前,您需要先升级arms-pilot并重启应用。
重要 升级arms-pilot不会对您的应用产生任何影响。但需要注意的是,在升级arms-pilot的过程中,请不要进行应用发布、应用重启、应用回滚等操作。
为容器服务Kubernetes版升级arms-pilot并重启应用的操作步骤如下:
- 升级arms-pilot。
- 登录容器服务管理控制台。
- 在左侧导航栏,单击集群。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在左侧导航栏,选择 。
- 在无状态页面,从命名空间下拉列表中选择arms-pilot-system或arms-pilot。
- 找到名称为arms-pilot-ack-arms-pilot的无状态应用(Deployment),在其右侧操作列,选择 。
- 在重新部署对话框,单击确定。
- 如果您的集群同时安装了mse-pilot, 您需要在升级arms-pilot后升级mse-pilot。
- 在当前的无状态页面下,从命名空间下拉列表中选择mse-pilot。
- 找到名称为arms-pilot-ack-arms-pilot的无状态应用(Deployment),在其右侧操作列,单击编辑。
- 在编辑页面,设置镜像Tag为v1.29,然后单击更新。
重要 升级mse-pilot不会对您的应用产生任何影响。但需要注意的是,在升级mse-pilot的过程中,请不要进行应用发布、应用重启、应用回滚等操作。 - 如果被监控的应用的PID为1,您需要修改应用的YAML配置文件。
- 重启应用。
- 在无状态页面,从命名空间下拉列表,选择应用所在命名空间,找到应用的Deployment,在其右侧操作列,选择 。
- 在重新部署对话框,单击确定。
功能入口
- 登录EDAS控制台。
- 按需执行以下任一操作来进入应用的详情页面:
- 在左侧导航栏选择容器服务K8s集群或Serverless K8s集群页面单击集群ID,然后在集群详情页面的应用列表区域单击具体应用名称。 (或 ),在顶部菜单栏选择地域并在页面上方选择微服务空间,在
- 在左侧导航栏单击应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,在集群类型下拉列表中选择容器服务/Serverless K8s集群,然后单击目标应用名称。
- 在应用详情的左边导航栏中选择 。
- 在Arthas诊断页面,选择应用的Pod。
- 如果检测未下载Arthas,您需要重新部署探针以下载Arthas。具体操作,请参见步骤1。
- 如果检测未挂载Arthas,EDAS会为您重新部署应用以挂载Arthas。如何手动部署应用,请参见步骤4。
- 如果尝试挂载Arthas失败,您需要检查应用的PID:
- PID为1:您需要修改应用的YAML配置文件。具体操作,请参见步骤3。
- PID不为1:您可以在EDAS容器服务K8s和Serverless K8s交流群咨询。
JVM概览
JVM概览支持查看应用的JVM相关信息,包括JVM内存、操作系统信息、变量信息等,帮助您了解JVM的总体情况。
Arthas诊断页面默认显示JVM概览页签,您可以在JVM概览页签下查看以下信息:
- JVM内存:JVM内存的相关信息,包括堆内存使用情况、非堆内存使用情况、GC情况等。
- 操作系统信息:操作系统的相关信息,包括平均负载情况,操作系统名称、操作系统版本、Java版本等。
- 变量信息:变量的相关信息,包括系统变量和环境变量。
- 可选:线程Top-10:CPU使用率排名前10的线程的相关信息,包括名称、ID、CPU使用率、状态。
如需查看某个线程的堆栈信息,您可以在某个线程右侧的操作列,单击查看。
线程耗时分析
线程耗时分析支持显示该应用的所有线程和查看线程的堆栈信息,帮助您快速定位耗时较高的线程。
- 在Arthas诊断页面,单击线程耗时分析页签。线程耗时分析页签下按照CPU使用率降序显示该应用的所有线程的相关信息,包括线程的名称、ID、CPU使用率、状态。
- 如需查看某个线程的堆栈信息,您可以在某个线程右侧的操作列,单击查看。
方法执行分析
方法执行分析支持抓取方法的某一次执行的耗时、入参、返回值等信息和钻入,帮助您快速定位导致慢调用的根本原因。方法执行分析适用于调用线下无法复现或日志缺失等场景。
- 在Arthas诊断页面,单击方法执行分析页签。
- 在方法执行分析页签下,选择服务,单击确定。重要 选择服务后,EDAS将自动推断该服务对应到代码的类和方法,为您自动填写对应的类和方法。如果推断失败,您需要手动填写该服务对应到代码的类和方法。方法页签下显示EDAS随机抓取的该方法的某一次执行的信息,包括方法名、执行耗时、入参、返回值、异常以及该方法的内部方法的信息。该方法的内部方法中执行耗时最高的方法的时间轴标红显示。
- 可选:如需钻入某个内部方法,在其右侧操作列,单击钻入。方法页签下显示该方法的该次执行信息,包括方法名、执行耗时、入参、返回值、异常以及该方法的内部方法的信息。该方法的内部方法中执行耗时最高的方法的时间轴标红显示。
- 如需指定抓取方法的执行的满足条件,执行以下操作:
- 可选:如需查看方法源码,在方法页签下,单击查看方法源码。
如下图所示,每一次内部方法的执行耗时都会以注释的方式显示在源代码中。该方法的内部方法中执行耗时最高的方法的源代码标红显示。
性能分析
性能分析支持对CPU耗时、内存分配等对象进行一定时间的采样并生成相应的火焰图,帮助您快速定位应用的性能瓶颈。
- 在Arthas诊断页面,单击性能分析页签。
- 在性能分析页签下方,单击新建火焰图。
- 在新建火焰图对话框,选择火焰图类型,输入采样时间,输入备注信息,然后单击确认。
参数 描述 示例值 火焰图类型 采样对象的类型。取值: - cpu耗时
- 内存分配
- 锁耗时
- itimer
cpu耗时 输入采样时间(单位:秒) 采样的时长。取值:10~1800。 30 性能分析页签下方显示新建火焰图的任务信息,包括开始时间、采样时间、任务执行Pod等。 - 在性能分析页签下方,找到任务记录,在其右侧任务状态,单击查看火焰图,根据页面提示下载SVG格式的火焰图文件,然后在浏览器中打开。