You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
Android SDK 接入
验证数据上报
复制全文
下载 pdf
验证数据上报
您可以根据业务需求,按照以下模块说明,检查对应模块是否接入成功。​
前提条件​
完成SDK上报配置​
  • 配置设备白名单​
  • SDK上报配置页面默认配置的采样率较低,在SDK接入测试阶段请配置DID白名单,确保当前设备所有性能数据都采样命中,才能上报到平台查看这些数据。具体请参见创建白名单和如何获取DID?。​
  • 配置各模块采样率​
  • 崩溃是100%上报的,不受采样率控制。除了崩溃,其他监控数据需要在SDK上报配置页面配置采样上报,默认情况下采样命中后才会上报。​
  • 例如,验证卡顿数据前,请在SDK上报配置页面打开总开关,并将卡顿采样率配置为100%。验证完成后,再修改为适合的采样率。具体请参见创建SDK上报配置。​
Java崩溃/Java启动崩溃​
  1. 添加以下代码,等待App发生崩溃。​
  • ​
    throw new RuntimeException("Monitor Exception"); // 执行就崩,如果应用启动后8秒内崩溃, 则判定为启动崩溃进行上报​
    ​
  1. 重新启动App,SDK会立即上报上次启动期间发生的崩溃,然后在控制台查看上报成功的日志。​
卡顿分析​
  1. 在主线程调用以下函数,等待App发生卡顿。​
  • ​
    private void testSeriousBlock() {​
    try {​
    Thread.sleep(3500);​
    } catch (Exception e){​
    }​
    }​
    ​
  • 严重卡顿把sleep时间修改为6000毫秒。​
注意​
示例代码运行一次即可,运行多次可能会发生ANR,此时如果您只接入了性能组件是无法查看ANR日志的,如果您想查看ANR日志需要同时接入崩溃组件。​
  1. 初始化SDK时,在主线程阻塞,App会自动监控到卡顿,2分钟内会上报到服务器。​
启动分析/页面响应​
初始化SDK时,打开启动分析和页面响应的开关,App启动一段时间SDK会自动上报启动分析、页面响应的数据。​
流畅性/丢帧​
初始化SDK时,打开配置功能的开关,用户进入页面后滑动一段时间SDK会自动上报流畅性数据和丢帧数据。​
内存优化​
初始化SDK时,打开配置功能开关,设置debug测试模式。​
​
builder.debugMode(true);​
builder.memoryMonitor(true);​
​
以上代码可以模拟发生以下两种场景。两种采集时机由「SDK 上报配置 → 内存分析 → 启动日志收集的内存占用比例」控制(key 为 memory_module.memory_rate,默认 100),此处的内存占用指 Java 虚拟机堆占用率,不包含 Native 堆和物理内存:​
  • OOM获取模式​
  • 配置值 ≥ 100(含默认 100)或 < 50 时生效。SDK 不做周期检查,仅在 App 真的抛出 OutOfMemoryError、发生崩溃时,在崩溃线程同步 dump 一份 hprof。​
  • 调用 OOMMaker.createOOM(); 模拟 OOM。重新启动 App 后自动上报,几分钟后在控制台「内存优化」模块查看。​
  • 内存触顶模式​
  • 配置值取 50 ~ 99 时生效。SDK 会周期检查 Java 堆占用率,一旦达到阈值,就在子线程异步 dump 一份 hprof,不需要等 App 真的崩溃,适合真实 OOM 样本少的业务提前抓内存现场。​
  • 检查频率:线上(release 包)每 30 秒检查一次,App 启动后延迟 20 秒才开始检查。当同时满足以下两个条件时会切到测试节奏:① 使用 debug 构建的 APK(debuggable);② 调用了 builder.debugMode(true)。此时检查频率变为每 1 秒一次、App 启动后立即开始检查,且不受 8 小时 dump 频率限制、可以反复触发。只在 release 包上调 debugMode(true) 不生效。​
  • dump 完成后当前进程不会立即上报,hprof 暂存本地。需杀掉 App 进程冷启动重开(按 Home 切后台再回来不算),新进程启动后才开始分析并上传。​
  • 上传时设备需连接 WiFi。线上环境下,触发过一次触顶 dump 后 8 小时内不会再重复触发;debug 模式下该限制被绕过,可反复测试。​
  • 调用 OOMMaker.createReachTop(80);(括号内数值需与配置值匹配)。稍等 1 分钟让 SDK 完成检查和 dump,杀掉进程冷启动,几分钟后在控制台「内存优化」模块查看。​
网络分析​
初始化SDK时,配置插桩ApmPlugin的okHttp3Switch,打开网络监控开关。​
当App使用okhttp3进行访问时会自动监控到并上报到服务器。插桩支持的okhttp版本最低是3.10.0。当前okhttp3对外暴露了上报网络监控数据的接口。​
其他网络库监控需要自己采集网络监控数据,然后再通过网络监控数据接口上报网络数据,才能在平台查看监控数据。具体上报接口和上报数据结构请联系技术支持获取。​
上报策略​
网络监控日志记录后不会立即上报,每经过60s,触发一次上报。​
电量分析​
初始化SDK时,打开电量开关。​
App启动后,端上采样命中会自动采集上报电量数据。​
事件上报​
在事件管理页面新增事件并配置采样,事件采样命中才会上报。​
配置事件上报的规则​
​
HashMap<String, String> dimension = new HashMap<>();​
//维度值​
dimension.put("key1", "value1");​
dimension.put("key2", "value2");​
HashMap<String, Double> metric = new HashMap<>();​
//指标值​
metric.put("metric1", (double) 10);​
metric.put("metric2", 8.8);​
ApmInsightAgent.monitorEvent("event1", dimension, metric);​
​
配置事件采样​
​
/**​
* 事件上报​
*​
* @param serviceName 事件名​
* @param dimension 可枚举Key-Value,代表维度。key代表维度名称,value代表维度值,平台会自动计算key值下的value的百分占比和上报量​
* @param metric 不可枚举的Key-Value,代表指标。key代表指标名称,value代表指标值,平台会自动计算value的平均值和上报量​
*/​
public static void monitorEvent(final String serviceName, final Map<String, String> dimension, final Map<String, Double> metric) {​
}​
/**​
* 事件上报​
*​
* @param serviceName 事件名​
* @param dimension 可枚举Key-Value标识维度​
* @param metric 不可枚举的Key-Value标识指标​
* @param extraJson 辅助分析事件的数据,只可以在单点原始日志查看​
*​
*/​
public static void monitorEvent(final String serviceName, final Map<String, String> dimension, final Map<String, Double> metric, final JSONObject extraJson) {​
}​
​
通过以上事件上报的接口配置事件采样后,可以在平台查看事件信息。​
平台查看的事件示例:​
​
//代表event1 采样没有命中​
2021-04-11 21:19:01.019 13535-13587/com.example.apm.insight.demo D/ApmInsight: Receive:EventData event1 simple:false​
//代表event2 采样命中​
2021-04-11 21:19:01.916 13535-13587/com.example.apm.insight.demo D/ApmInsight: Receive:EventData event102 simple:true​
​
上报策略​
事件日志记录后不会立即上报,每经过60s,触发一次上报。​
CPU监控​
初始化SDK时,打开CPU监控,CPU指标会自动采集后上报。​
CPU异常可以在端上模拟异常场景,然后等待端上检测异常上报后,在平台查看异常数据。​
添加以下代码,模拟CPU异常:​
​
for (int i = 0; i < 6; i++) {​
new Thread(new Runnable() {​
@Override​
public void run() {​
while (true) {​
Math.acos(Math.cos(java.lang.Double.valueOf(9999999)));​
}​
}​
},"cpu-"+i).start();​
}​
​
打开debug开关后,在Logcat日志中过滤ApmInsight,可以查看以下日志:​
​
//CPU异常数据​
2021-12-30 15:29:29.512 26285-26887/com.example.apm.insight.demo D/ApmInsight: Receive:ExceptionCpuData​
//CPU指标​
2021-12-30 15:29:29.512 26285-26887/com.example.apm.insight.demo D/ApmInsight: Receive: ProcessCpuDat​
​
磁盘监控​
测试阶段建议将磁盘相关配置项的采样率都配置为100%,磁盘相关配置项的阈值都配置为1,最大上报异常文件个数使用默认值20,端上设置 builder.debugMode(true) 。​
App一次启动只会上报1次磁盘数据。为了降低对性能的影响,SDK默认为App在后台时才会采集上报一次磁盘数据,按照测试阶段建议配置后,您可以设置debug模式在前台也可以采集上报磁盘数据。 冷启动后过滤ApmInsight会看到Receive:DiskData的日志,代表磁盘监控数据上报成功,可以在磁盘异常页面查看数据。​
流量监控​
初始化SDK时,打开流量开关。App启动后,端上采样命中会自动采集上报流量数据。流量指标10分钟采集一次。流量异常需要端上10分钟流量消耗超过平台配置的阈值。​
添加以下代码,模拟流量异常:​
​
//十分钟流量​
2023-01-12 21:10:49.615 5472-5576/com.example.apm.insight.demo D/ApmInsight: TrafficData10​
//流量异常​
2023-01-12 21:10:49.615 5472-5576/com.example.apm.insight.demo D/ApmInsight: TrafficDataException​
​
​
最近更新时间:2026.10.15 20:24:46
这个页面对您有帮助吗?
有用
有用
无用
无用