iOS 性能监控(一)—— CPU功耗监控

//! 遍历当前任务内存活的所有线程

    for (int i = 0; i < threadCount; i++) {


thread_info_data_t threadInfo; // 32位data thread_basic_info_t threadBaseInfo;
mach_msg_type_number_t threadInfoCount = THREAD_INFO_MAX;
if (thread_info((thread_act_t)threads[i], THREAD_BASIC_INFO, (thread_info_t)threadInfo, &threadInfoCount) == KERN_SUCCESS) { threadBaseInfo = (thread_basic_info_t)threadInfo; // 获取线程的信息 if (!(threadBaseInfo->flags & TH_FLAGS_IDLE)) { integer_t cpuUsage = threadBaseInfo->cpu_usage / 10; // CPU最大usage为1000,因此除10即可获得CPU当前的利用率。 if (cpuUsage > CPUMONITORRATE) { // 超过设定的阈值时,记录堆栈 //cup 消耗大于设置值时打印和记录堆栈 NSString *reStr = qiStackOfThread(threads[i]); QiCallStackModel *model = [[QiCallStackModel alloc] init]; model.stackStr = reStr; //记录数据库中 [[[QiLagDB shareInstance] increaseWithStackModel:model] subscribeNext:^(id x) {}]; NSLog(@"CPU useage overload thread stack:\n%@",reStr); } } }

}