You need to enable JavaScript to run this app.
导航

性能监控

最近更新时间2024.05.06 14:42:18

首次发布时间2024.05.06 14:36:54

性能监控目前可以采集Windows和Mac的CPU和内存信息。

前提条件

初始化Parfait SDK。持有初始化成功的parfait_wrapper_ptr指针。具体请参见接入说明

主进程接入性能监控

步骤一:开启上报

业务需要调用Upload()显示开启性能监控数据的周期上传。一旦开启,Parfait将根据report_interval的数值定期上传数据,直至Parfait SDK退出。

说明

此方法在Parfait SDK初始化后仅需要调用一次。

/**
 * 触发自定义事件/自定义日志/性能监控数据的自动间隔循环上传
 **/
void ParfaitWrapperBase::Upload();

示例代码:
parfait_wrapper_ptr->Upload();

步骤二:设置场景

根据业务选择是否设置场景信息。调用后性能数据会带上该场景tag,可用于在平台上筛选不同场景的数据。

/**
 * 设置场景,可随时调用该接口
 * @param scene 场景信息
 */
void ParfaitWrapperBase::SetPerformanceScene(const char* scene);

示例代码:
// 1.初始化SDK
// 2.当前场景为刚启动,设置场景为launch
parfait_wrapper_ptr->SetPerformanceScene("launch");
// 3.应用启动完成,进入running状态
parfait_wrapper_ptr->SetPerformanceScene("running");

步骤三:设置采集频率

创建性能监控的config,用于设置各类数据的采集频率。

注意

如果采集时间间隔过短,会采集并上报大量性能事件,消耗事件量。

struct PerformanceConfig {
  int collect_interval_s = 5;  //collect_interval_s为采集间隔时间
  int aggregate_interval_s = 5;   //aggregate_interval_s为聚合间隔时间
  RECORD_INTERVAL upload_interval_s = INTERVAL_30;  //upload_interval_s为数据上报时间
};

parfait::PerformanceConfig config = {10, 10, parfait::INTERVAL_30};

假设开启了内存监控,采集频率的配置是collect_interval_s为10s,aggregate_interval_s为30s,upload_interval_s为INTERVAL_30。那么PC端性能监控表现为:

  • 每隔10s采集一次内存监控值
  • 每隔30s聚合前3次内存监控值,取3次的平均值为最终结果
  • 每隔30s上报一次最终结果

步骤四:开启CPU监控

说明

由于系统限制,Mac只能采集本进程的性能监控数据。Windows可以采集指定pid的性能监控数据。

采集指标

指标名

采集方式

进程CPU使用率(%)

  • Windows:两次采集点之间内核模式和用户模式所用时间之和的差值(GetProcessTimes)/两次采集点实际时间差值(GetSystemTimeAsFileTime)/CPU核数
  • Mac:所有线程的cpu_usage之和

系统CPU使用率(%)

  • Windows:两次采集点之间GetSystemTimes返回的
    (lpKernelTime - lpIdleTime + lpUserTime) / (lpKernelTime + lpUserTime)
  • Mac:host_statistics(HOST_CPU_LOAD_INFO)返回的
    Sum of cpu_tick(CPU_STATE_USER + CPU_STATE_SYSTEM + CPU_STATE_NICE)/Sum of cpu_tick(CPU_STATE_USER + CPU_STATE_SYSTEM + CPU_STATE_NICE + CPU_STATE_IDLE)

API

#include "ParfaitWrapperBase.h"
/**
 * 启动本进程cpu性能监控。如果win下需要监控其他进程,请使用带pid的方法
 * mac只能调用此方法,即只能监控本进程
 * @param config 性能监控config
 */
void ParfaitWrapperBase::StartCPUMonitor(const PerformanceConfig& config);

/**
 * 启动cpu性能监控,mac调用此方法不生效
 * @param config 性能监控config
 * @param pid 进程pid
 * @param process_name pid所绑定的进程标识,对应apmplus平台上的进程名
 */
void ParfaitWrapperBase::StartCPUMonitor(const PerformanceConfig& config,
                                         int pid, 
                                         const char* process_name);

示例代码:
// 开启本进程的CPU监控
parfait::PerformanceConfig config = {10, 10, parfait::INTERVAL_30};
parfait_wrapper_ptr->StartCPUMonitor(config);

步骤五:开启内存监控

说明

由于系统限制,Mac只能采集本进程的性能监控数据。Windows可以采集指定pid的性能监控数据。

采集指标

指标名

说明

采集方式

进程虚拟内存(MB)

进程虚拟内存,即process_vss

  • Windows:GetProcessMemoryInfo返回的PROCESS_MEMORY_COUNTERS的PagefileUsage
  • Mac:mach_task_basic_info返回的virtual_size

进程内存(MB)

进程常驻内存大小,即process_rss
可以理解为物理内存

  • Windows:WorkingSetSize
  • Mac:task_vm里面的phys_footprint

剩余内存(MB)

系统剩余物理内存

  • Windows:GlobalMemoryStatusEx返回的ullAvailPhys
  • Mac:host_vm.free_count - host_vm.speculative_count + host_vm.external_page_count + host_vm.purgeable_count

总内存(MB)

系统总物理内存

  • Windows:GlobalMemoryStatusEx返回的ullTotalPhys
  • Mac:sysctl返回的总内存

内存使用率(%)

进程物理内存/系统总物理内存

-

API

#include "ParfaitWrapperBase.h"
/**
 * 启动本进程cpu性能监控。如果win下需要监控其他进程,请使用带pid的方法
 * mac只能调用此方法,即只能监控本进程
 * @param config 性能监控config
 */
void StartMemoryMonitor(const PerformanceConfig& config);

/**
 * 启动内存性能监控,mac调用此方法不生效
 * @param config 性能监控config
 * @param pid 进程pid。windows和Linux支持pid非本进程,mac调用此方法不生效
 * @param process_name pid所绑定的进程标识,也是slardar上所展示时使用的标识
 */
void ParfaitWrapperBase::StartMemoryMonitor(const PerformanceConfig& config,
                                             int pid, 
                                             const char* process_name);

示例代码:
// 开启本进程的CPU监控
parfait::PerformanceConfig config = {10, 10, parfait::INTERVAL_30};
parfait_wrapper_ptr->StartMemoryMonitor(config);

步骤六:查询消费

查询数据,请参见自定义看板

多进程接入性能监控

Windows

接入参数

说明

是否需要接入SDK

是否需要初始化SDK

接入方式

主进程监控子进程的性能使用情况。

上报时机

主进程上报。

上报参数

主进程初始化SDK的参数。

整体流程

  1. 主进程初始化Parfait SDK。
  2. 主进程开启Upload循环间隔上报。
  3. 主进程获取子进程PID。
  4. 主进程调用支持子进程性能监控的API,传入PID,监控子进程性能使用情况。
  5. 主进程上报子进程性能监控数据。

Mac

接入参数

说明

是否需要接入SDK

是否需要初始化SDK

接入方式

子进程自行监控自身性能。

上报时机

子进程上报自身数据。

上报参数

子进程初始化SDK的参数。

整体流程

  1. 子进程初始化Parfait SDK。
  2. 子进程开启Upload循环间隔上报。
  3. 子进程开启自身性能监控。
  4. 子进程上报数据。