方法追踪是对某个类的某个方法进行动态埋点,当这个类的方法被调用时,APM采集 探针会按照您配置的方法追踪规则对方法的调用数据进行采集,并将调用数据展现在 调用链页面中。方法追踪主要用来帮助应用的开发人员在线定位方法级性能问题。
APM对三方开源组件发布的API进行埋点,但没有对您应用的特定方法进行埋点。当您 需要监控应用中比较重要的方法,或APM不完全支持一些三方开源组件导致采集探针
用户指南 5 调用链追踪
采集不到部分方法时,需要自定义方法追踪,配置完成后,您可在调用链页面查看该 方法的调用信息。
步骤1 登录应用性能管理。
步骤2 在左侧导航栏中选择“调用追踪 > 方法追踪”。
步骤3 自定义方法追踪(即对应用进行埋点),并启动方法追踪。
在“方法追踪”页面单击“添加方法追踪”,参考下图进行设置,设置完成后单击
“启动”。
说明
● 若未设置“方法参数”,则默认对同一方法名的所用方法进行采集。
● 若未设置“取值”,则采集时不对方法的取值进行筛选。
● 若设置“启动参数采集”,则表示采集调用链方法入参和出参,若采集的参数总长度大于 255字节则仅显示255个字节的参数内容。
● 若设置“启动方法栈采集”,则表示采集方法的调用栈信息。
● 若设置“启动方法匹配全采集”,则表示采集所有的调用链方法;若未设置该选项,则表示 根据采集配置时设置的采样率(普通采样或智能采样)采集调用链方法。
步骤4 在页面下方通过总调用耗时、调用状态初步定位业务性能问题。
步骤5 单击问题调用所在行“操作”列的“查看调用关系”,查看方法级的调用关系。
----结束
用户指南 5 调用链追踪
6 事务列表
事务表示一个HTTP请求,是从“用户请求 > webserver > DB > webserver > 用户请 求”的完整过程。现实生活中,事务即一次任务,用户使用应用完成一项任务,比如 电商应用程序中一次商品查询就是一个事务,一次支付也是一个事务。
在执行一个事务时,可能需要服务间多次调用来完成该事务,任何一次慢调用或错误 调用都会导致系统响应较慢。在日常运维中,可通过对这些响应较慢的事务进行分 析,从而定位、解决应用问题,以提升服务的用户体验。
事务界面操作说明
图6-1 事务界面
说明
事务详情展示列表中,“错误数”是返回码大于等于400的请求的数量,其他请求不在错误数统 计范围中。
1. 在事务界面,可以展示设置时间内应用的事务详情。
– 展示应用中事务的调用次数、错误次数分布情况。
– 展示应用中事务的整体时延分布情况。
2. 在事务界面,单击“新增分组”,勾选事务项,可以将已选择的事务项移至新 组,命名分组名称。
用户指南 6 事务列表
3. 在事务界面,单击“事务拓扑”,可以跳转到拓扑界面查看该事务的拓扑详情。
4. 在事务界面,单击“查看调用链”,可以跳转到调用链界面查看该事务的调用链 数据。
使用事务分析问题
以某事务极慢为例。
步骤1 登录应用性能管理。
步骤2 在左侧导航栏中选择“事务列表”。
步骤3 在事务列表中选择事务组中极慢的事务。
步骤4 单击操作列中“事务拓扑”查看该事务的全链路拓扑结构,在拓扑界面中查看实例具 体情况。
步骤5 右键单击极慢的实例,选择“调用链搜索”,跳转到调用链页面,通过参数、调用耗 时等进一步定位问题。
----结束
自定义事务
为了更精准定义事务,精准采集事务相关的调用链数据,您可以利用URI模板自定义事 务,将多个请求分类放至不同的事务中。当采集器接收到请求时,优先计算自定义事 务。
用户指南 6 事务列表
步骤1 在事务界面,单击“自定义事务”。事务是由请求方法和正则表达式组成的,事务格 式为{Request Method}_/{pattern},例如:请求方法为GET、POST,正则表达式为 / {name},则事务为GET,POST_/{name}。
步骤2 选择“请求方法”。请求方法是一个或多个请求的方法名,包括GET、PUT、
DELETE、POST、HEAD、CONNECT、OPTIONS、PATCH、TRACE、ALL,其中ALL 表示可以匹配所有的请求方法。
步骤3 在“正则表达式”文本框中,输入事务规则,单击“确定”,自定义事务规则保存成 功。
正则表达式采用Spring MVC框架的URI模板匹配方式,例如:
@RequestMapping(path="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET),其中ownerId、petId为变量。
如果您需要添加多条自定义事务规则,请单击“添加正则匹配”。
说明
● 事务规则只能由英文大小写字母、数字、特殊字符“?”“*”“|”“=”“{}”“&”组 成,且以“/”开头,不以“/”结尾,长度限制为1~50个字符。
● “?”“*”支持模糊匹配,“?”可以匹配一个字符,“*”可以匹配一个URI中两个“/”
中间的0到n个字符,“**”可以无限匹配字符。例如:输入/first/*,可以匹配/first/test,不 能匹配/first/test/test,输入/first/**,可以匹配/first/test、/first/test/test。
----结束
用户指南 6 事务列表
7 SQL 分析
通过图表形式展现数据库、SQL语句的调用次数、响应时间、错误次数等关键指标,
用于分析异常SQL语句导致的数据库性能问题,异常SQL语句是指慢SQL语句和调用出 错的SQL语句。SQL分析当前仅支持MySQL、Oracle、PostgreSQL关系型数据库。
SQL 操作界面说明
图7-1 SQL 界面图示
异常 SQL 语句分析
数据库SQL语句异常,可能导致业务超时等性能问题。在日常运维中,可通过错误耗 时、响应时间等关键指标对数据库进行监控,定位出那些执行耗时长、效率低、调用 出错的SQL语句,并对其进行分析和优化。
SQL开关用来控制是否对SQL数据进行采集,操作前您需要确保该开关已开启,否则您 将查询不到SQL数据。SQL开关默认为开启状态,若已被关闭,请在左侧导航栏中选择
“采集管理 > 采集配置”进行开启。
步骤1 登录应用性能管理。
用户指南 7 SQL 分析
步骤2 在左侧导航栏中选择“SQL分析”。
步骤3 在SQL界面中,设置右上角的时间范围,将时间调整到问题发生的时间段。
步骤4 在“概览”页签,通过数据库关键指标定位出应用中的问题数据库。数据库响应时间 长、调用错误次数多都可能导致性能问题。
步骤5 分析该数据库出现性能问题的原因。
单击“SQL分析”页签,在SQL语句列表中定位出异常SQL语句。
步骤6 进一步分析导致SQL语句异常的原因。
1. 单击该异常SQL语句,跳转到调用链页面,查看异常SQL对整个业务的影响。
用户指南 7 SQL 分析
2. 单击“操作”列的“查看调用关系”,找到异常SQL语句所在的方法。在该方法 中对该SQL语句进行分析,例如,是没有用到索引、数据量过大、语法错误或出 现死锁等原因导致SQL语句异常,找出原因后对SQL语句进行优化。
----结束
阈值规则
通过创建阈值规则创建“资源类型”为SQL的阈值规则。
如果产生告警后,需要查看产生告警具体的SQL语句,需要如下步骤:
步骤1 从告警详情中查看告警上报的时间、sqlId,以及数据库实例tier。
用户指南 7 SQL 分析
步骤2 在APM的SQL分析页面,根据查询到的tier和时间选择查询范围,查询到对应数据库实 例当前时间内的SQL语句列表。
步骤3 用查询到的sqlId搜索,查询到具体的SQL语句。
步骤4 查询到SQL语句后,根据业务场景和SQL语句的指标值进行分析。
----结束
用户指南 7 SQL 分析
8 JVM 监控
JVM监控展示基于Java应用的JVM运行环境的内存和线程指标,您可以实时监控指标趋 势进行性能分析。
JVM监控功能提供JVM内存和线程指标,您可以单击“内存”和“线程”两个页签,
查看内存和线程指标图,快速分析定位内存泄漏、线程异常等问题。
内存指标图表
如图8-1所示,展示设置的时间段内某个实例的总内存、堆内存、非堆内存等JVM不同 内存区域的最大值、分配值和使用情况的趋势,也展示设置的时间段内某个实例的垃 圾收集堆的GC时间和GC次数趋势。
图8-1 内存指标图
JVM内存介绍
JVM区域总体分为Heap memory和Non-Heap memory。
● Heap memory:堆是Java 虚拟机运行时数据区域,分配所有实例和数组的内存。
对象的堆内存由称为垃圾回收器的自动内存管理系统回收。Heap区分为Eden Space、Survivor Space和Tenured Space。
● Non-Heap memory:Java 虚拟机管理堆之外的内存。Non-Heap区分为Code Cache、Permanent Space或Meta Space。
Java堆是垃圾收集器管理的主要区域,又称为Garbage Collection Heap,GC方式包括 Full GC和Minor GC。
用户指南 8 JVM 监控
表8-1 内存区域说明 区域名称 说明
EdenSpace 用于最初从线程池分配内存给大部分对象。
Survivor
Space 用于保存在Eden区内存池中经过垃圾回收后没有被回收的对象。
Tenured
Space 用于保持已经在Survivor区内存池中存在了一段时间的对象。
CodeCache 用于编译和保存本地代码的内存。
Permanent
Space 用于保存虚拟机的静态数据,例如,类和方法对象。
MetaSpace 用于保存本地化内存中类的元数据。Java 8之后Meta Space替代 Permanent Space。
Direct
Buffer 监控直接缓冲区的使用情况。
Full GC 当内存回收之后仍无法满足内存空间分配需求时, 对整个堆空间(新 生代、老年代和永久代)进行垃圾收集。
Minor GC 当分配对象遇到内存不足时,对新生代空间(Eden区和Survivor区)
进行垃圾收集。
说明
线程名称 说明
最大连接数 Tomcat可用的最大连接数。
当前连接数 Tomcat当前已占用的连接数。
最大线程数 Tomcat最大执行线程数。
当前线程数 Tomcat当前执行线程数。
繁忙线程数 Tomcat当前处理任务的执行线程数。
添加阈值规则
您可以给JVM内存及线程的各个指标添加阈值规则,当满足规则条件时会触发告警,
提醒您关注。
步骤1 在“JVM监控”界面,先在页面左上角选择应用,再选择服务的具体某个实例。
步骤2 在右侧的趋势图中可给内存或线程的每个指标设置阈值规则。单击趋势图上的“添加 阈值规则”。
步骤3 填写规则参数,如下图示例,最后单击“确认”。若需要发送告警通知,则“发送通
步骤3 填写规则参数,如下图示例,最后单击“确认”。若需要发送告警通知,则“发送通