开发者社区> 问答> 正文

方法追踪有哪几种?



简介


EDAS 方法追踪能够帮助用户在应用运行时出现问题时,进行快速的问题排查,典型的场景包括:

  • 应用运行时突然发现执行某一个业务逻辑耗时很长,此时希望能够有一种方式定位运行时代码各个部分的耗时,以确定耗时点在什么地方。
  • 应用运行时一切正常,绝大部分情况下,业务运行都非常顺畅,但某一例用户反馈,当传入XXX参数时,业务响应非常缓慢。此时希望能够有一种方式针对特定的方法入参来观察代码执行情况。
  • 一个比较复杂的程序方法,其中业务逻辑较为复杂,在真正运行时,无法确定具体调用了那些逻辑,以及调用时序。此时希望能够有一种方式详细的展现出方法执行的具体逻辑、时序等。

此外,以上的任何一种场景,都希望代码无入侵,可以在应用运行时不停机的情况下,定位问题。
EDAS 方法追踪采用 JVM 字节码增强的技术,对选中方法的所有方法调用增加必要的耗时与调用序列记录的增强,从而达到观看执行过程中的具体执行序列的目的。

使用限制


以下限制项,如果确实影响您的业务或者排查场景,请提交工单,我们将针对某些限制进行改进或配置白名单。

  1. 原则上,只允许追踪业务的类,所以在正式开始追踪之前,会按照包名进行过滤。

  2. 为了防止方法调用次数太多而造成日志打爆的情况,我们在输出的过程中会进行采样输出,默认的策略为输出每秒进入该方法的十次调用。

  3. 当 EDAS 控制台重新进入或进行界面刷新之后,将无法获取历史的追踪记录,且之前已经被拉取的追踪信息将不再保留。

  4. 自动停止策略:进入未活跃状态十分钟后,EDAS 将自动卸载追踪模块,并将方法还原至初始状态(未增强之前)。

  5. 参数打印:目前 EDAS 只支持打印 Java 基本类型的输出(string, char, int, float, double, short, boolean)。

  6. 如选中的字符串输出过长,EDAS 将截取前 100 个字符进行输出。

  7. 在使用的过程中,如果发生了 JVM 实例重启的情况,需要重新启用追踪才能生效(先停止再启动)。

  8. 目前最多支持输出 10000 条追踪日志,达到 10000 条之后,需要重启追踪才能重新输出。

  9. 目前版本不支持通过 Docker 方式创建的应用。


环境检测


由于方法追踪功能运行时采用 JVM 字节码增强的技术实现,为保证应用的正常运行,在某些环境检测项目没有通过的情况下,此工具不能继续使用。
在使用之前,EDAS 会自动检查以下项目:
  1. Ali-Tomcat 的状态必须处于 [backcolor=transparent]运行中
  2. CPU 利用率低于60%
  3. 空闲系统内存大于100M
  4. JVM PermGen 或 Metaspace 空闲空间大于20M。

如果上述检测项没有通过时,建议您处理完对应的告警项,再点击 [backcolor=transparent]重试。

使用指南


  1. 登录 EDAS 控制台

  2. 在左侧导航栏单击 [backcolor=transparent]应用管理,再在应用列表中单击需要检测的应用。

  3. 在应用详情页面左侧的导航栏中,单击 [backcolor=transparent]应用诊断。

  4. 在应用诊断页面中的单击 [backcolor=transparent]方法追踪 页签。
    说明:
    如没有看到方法追踪页签,请按如下步骤进行重试:
    确认使用 Chrome 浏览器(目前只在 Chrome 下进行了官方测试),并强制刷新页面。

  5. 如果登录的账号为子账号,请确认主账号已经授予该账号的相应权限。
    权限项检查路径为:[backcolor=transparent]应用管理 > [backcolor=transparent]应用诊断 > [backcolor=transparent]方法追踪 和 [backcolor=transparent]工具授权。

在开始进行检测前,EDAS 会对应用所在机器进行环境检测,在环境检测的提示对话框中,勾选 [backcolor=transparent]我确认上述条件,接受并继续。, 并单击 [backcolor=transparent]确定使用 开始环境检测。
当所有项目检测通过后,将跳转至追踪页面。

[backcolor=transparent]显示区域的左边,为每一条记录即为每一次调用所产生的日志,其中:

  • 表格左边有 44-62/150 字样,意思是当前浏览器共获取了150条记录,当前只显示了行号为 44 - 62的追踪记录。

  • 在表格的底部,提示 “请输入 h 键显示帮助信息”。输入后,可见到该区域使用的一些快捷键使用帮助:
  • h : 显示帮助文档
  • Ctrl + g: 实时展示所获取的最新数据,由于随着调用数量的越来越多,不可能把所有的记录都渲染出来并显示,Ctrl + g 类似于 tail 功能,每次有新的数据进来之后,都会显示最新获取的数据。
  • g: 跳转至某条记录:搜索某行号的追踪信息,并选中展示详情。
  • Ctrl + c 或 ESC:终止当前执行的命令
  • Ctrl + h: 向下翻页:每次向下翻十条追踪信息
  • Ctrl + l: 向上翻页:每次向上翻十条追踪信息
  • j 或 ↓: 选中下一条追踪信息
  • k 或 ↑: 选中上一条追踪信息
  • Enter 或者双击:放大或者还原选中的追踪信息

[backcolor=transparent]显示区域的右边,为所选中记录的详情展示,详情页面可以双击/回车进行放大,放大之后可按 ESC 键还原至初始状态;这个页面只是一些基本的信息展示,其中:
  • [backcolor=transparent]追踪详情:展示选中方法内部每一次方法调用的耗时及其执行序列,蓝色的耗时为执行此方法的总耗时,红色的耗时意味着此次方法调用占用了总耗时的 30% 以上。
  • [backcolor=transparent]输出详情:展示输出执行过程中的异常、返回值、选中的输入参数(在表单的[backcolor=transparent] 更多 选项处选择)
  • [backcolor=transparent]方法堆栈详情:展示进入被追踪方法之前的堆栈信息。

停止追踪。
在方法追踪开始之后,[backcolor=transparent]开始追踪 按钮将变成 [backcolor=transparent]停止追踪 。单击 [backcolor=transparent]停止追踪,EDAS 将被追踪的方法还原至初始状态(增强之前的状态),且 EDAS 将以机器为维度记录追踪信息,下次再次进入此页面之后,将预填上一次的追踪信息。
在停止状态下,如果您修改某些项目(如追踪另外的方法)后,再次点击 [backcolor=transparent]开始追踪 后将按照最新的表单信息提交并继续。

展开
收起
猫饭先生 2017-10-26 10:31:06 1633 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
“静态调用链路发现“在APM中的应用场景分析及实践探索 立即下载
“静态调用链路发现”应用场景分析及实践探索 立即下载
Android内存泄漏自动化链路分析组件Probe 立即下载