移动性能监控(APM)依赖移动分析客户端 SDK 来进行埋点,收集 App 性能相关数据生成日志并上报到服务端。根据 mPaaS 客户端与服务端协定的埋点数据格式,服务端从客户端上传的埋点日志中提取有效数据,从而实现对客户端各项指标的监控分析。
本文介绍如何在客户端配置性能监控埋点,包括网络监控、H5 性能监控、页面加载监控、启动速度监控、小程序监控。
前提条件
确保 mPaaS 基线版本 ≥ 10.1.68.44。如当前使用的基线版本低于 10.1.68.44,可参考 mPaaS 10.1.68 升级指南进行基线版本升级。
确保已接入移动分析组件。具体操作请参见 接入移动分析服务。
确保已接入移动网关组件。具体操作请参见 移动网关服务。
如需使用 H5 性能监控功能,需接入 H5 容器。具体操作参见 接入 H5 容器。
如需使用小程序性能监控功能,需接入小程序。具体操作参见 接入小程序。
网络监控
开启网络监控开关
APM 网络性能监控埋点需要通过项目代码手动开启。在 App 启动过程中,调用如下代码以开启网络性能监控。
#import <MPMasAdapter/MPAnalysisHelper.h>
[MPAnalysisHelper startAPMNetMonitor];
mPaaS RPC 网络监控埋点
开启 APM 网络监控后,mPaaS RPC 的网络监控由 mPaaS 内置的网络框架自动进行,无需您在代码中手动进行埋点。
业务自定义网络监控埋点
如果您使用了非 mPaaS RPC 网络通讯,并想要对这部分的网络质量进行监控,则需要在 App 启动过程中开启 APM 网络监控,同时还需要对自己的网络调用进行手动埋点。
调用以下代码进行埋点:
#import <MPMasAdapter/MPRemoteLoggingInterface.h>
NSDictionary *param = @{
@"totalRequestTimeInterval": @(totalRequestTime),
@"dnsTimeInterval": @(dnsTime),
@"tcpTimeInterval": @(tcpTime),
@"sslTimeInterval": @(sslTime),
@"firstPackageTimeInterval": @(firstPackageTime),
@"transportTimeInterval": @(transportTime),
@"downloadAverageSpeed": @(downloadAverageSpeed),
@"httpStatusCode": @(httpStatusCode),
@"rpcStatusCode": rpcStatusCode,
@"operationType": operationType,
@"clientIP": clientIP,
@"gwIP": gwIP,
@"traceId": traceId
};
[MPRemoteLoggingInterface writeAPMNetLog:param];
传入的参数包括:
参数 | 说明 |
totalRequestTimeInterval | 总请求用时,单位为 ms。 |
dnsTimeInterval | DNS 解析耗时,单位为 ms。 |
tcpTimeInterval | TCP 建连耗时,单位为 ms。 |
SSLTimeInterval | SSL 建连耗时,单位为 ms。 |
firstPackageTimeInterval | 首包用时,从发起请求到收到服务器第一个数据包所用的时间,单位为 ms。 |
transportTimeInterval | 传输用时,从收到第一个数据包到最后一个数据包所用的时间,单位为 ms。 |
downloadAverageSpeed | 下载资源文件的平均速度。 |
httpStatusCode | HTTP 调用状态码,200 表示正常。 |
rpcStatusCode | RPC 调用状态码,200 表示正常。 |
operationType | 接口标识符,用于标识网关操作。 |
clientIP | 客户端 IP。 |
gwIP | 网关 IP。 |
traceId | 客户端请求的链路 ID。 |
H5 性能监控
H5 性能监控的埋点由 mPaaS H5 容器自动完成,您接入 H5 容器即可,无需手动进行埋点。
页面加载监控
原生页面的加载时长埋点由 mPaaS 原生页面自动化埋点 SDK 完成,您接入移动分析组件后,无需手动进行埋点。
启动速度监控
基于 mPaaS 框架
如果您的项目接入了 mPaaS 框架,那么启动速度由 mPaaS 框架进行记录,您只需在 App 启动完成(比如在首页出现时)后记录启动时间,并发出启动完成的通知即可。
// globalMonitorStartUpTime 是已定义的变量,导入 <mPaas/MPaaS+MonitorStartUpTime.h> 头文件后即可使用
double time = CFAbsoluteTimeGetCurrent() - globalMonitorStartUpTime;
[ [NSNotificationCenter defaultCenter] postNotificationName:@"APMonitor_Startup_Cost_Time" object:nil userInfo:@{@"CostTimeOnUserFeel": [NSString stringWithFormat:@"%f", time]}];
基于原生框架
如果您的项目未接入 mPaaS 框架,那么您需要在 App 启动完成时手动调用上报启动埋点。
#import <MPMasAdapter/MPAnalysisHelper.h>
//record the time interval used for the app startup
NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
[[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];
闪退监控
添加闪退埋点,以统计闪退相关数据。
基于 mPaaS 框架
在接入了框架(工程中有 APMobileFramework
库)的情况下,闪退上报模块会自动捕获闪退日志并上传到服务端,您只需在集成 SDK 后确认闪退监控的开关为打开即可。为保证闪退日志能及时上报,推荐您在 main
函数中调用此接口。
基于原生框架
在未接入 mPaaS 框架(工程中无 APMobileFramework
库)的情况下,需要您在启动时打开闪退监控开关,并且在启动后上报闪退日志。
容灾开关
默认情况下,当连续发生四次闪退时会触发容灾处理,将会清理 Documents
目录下的文件,以避免因脏数据导致的闪退问题。在 10.1.60 及以上版本,您可以手动调用以下接口开启或关闭容灾处理。
#import <MPMasAdapter/MPAnalysisHelper.h>
/**
* 开启/关闭闪退容灾处理,默认开启
*/
+ (void)enableDisasterRecovery:(BOOL)enable;
只有真机运行程序的闪退日志才会被捕获并上传到日志服务器。如您需要调试闪退监控,请断开 Xcode,且请勿使用模拟器。
为保证闪退日志中的 version 与 product version 一致,务必在项目的
info.plist
中将 bundle version 与 product version 设置为相同的版本号。
卡顿/卡死监控
添加性能埋点,以统计卡顿、卡死相关数据。
基于 mPaaS 框架
卡顿/卡死监控默认对 10% 的设备开启,可通过下面这个接口设置卡顿开启率。
[MPAnalysisHelper setLagMonitorPercent: 100]; // 100% 监控,需要在 startPerformanceMonitor 调用之前设置
说明卡顿/卡死监控只有在真机上并且非 Xcode 调试状态下是打开的。
在启动时调用
[MPAnalysisHelper startPerformanceMonitor]
,推荐在-(void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中调用。
基于原生框架
SDK 封装了性能监控接口,推荐您在 AppDelegate 的 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions
方法中调用 [PerformanceHelper performanceMonitor]
。
卡顿/卡死监控只有在真机上并且非 Xcode 调试状态下是打开的。
#import "PerformanceHelper.h"
#import <MPAnalysis/MPAnalysisHelper.h>
static NSTimeInterval __start_timestamp = 0;
@implementation PerformanceHelper
+ (void)load
{
__start_timestamp = CFAbsoluteTimeGetCurrent();
}
+ (void)performanceMonitor
{
//start performance monitor
[MPAnalysisHelper setLagMonitorPercent: 100]; // 100% 监控,需要在 startPerformanceMonitor 调用之前设置
[MPAnalysisHelper startPerformanceMonitor];
//record the time interval used for the app startup
NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
[[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];
}
@end
开启小程序监控
接入小程序后,小程序会自动上报性能监控数据,无需您手动埋点。