美文网首页
性能监控、耗电优化

性能监控、耗电优化

作者: zhouluyao | 来源:发表于2020-05-08 17:42 被阅读0次

    线上性能监控,主要集中在 CPU 使用率、帧率和内存这三个方面。

    CPU使用率

    App 作为进程运行起来后会有多个线程,每个线程对 CPU 的使用率不同。各个线程对 CPU 使用率的总和,就是当前 App 对 CPU 的使用率。

    因为每个线程都会有这个 thread_basic_info 结构体,所以接下来的事情就好办了,你只需要定时(比如,将定时间隔设置为 2s)去遍历每个线程,累加每个线程的 cpu_usage 字段的值,就能够得到当前 App 所在进程的 CPU 使用率了。我们累加这个字段就能够获取到当前的整体 CPU 使用率。

    FPS监控

    1、对 FPS 的监控也可以比较简单的实现:通过注册 CADisplayLink 得到屏幕的同步刷新率,记录每次刷新时间,然后就可以得到 FPS。

    2、开始渲染时间与上次渲染时间差值 NSTimeInterval useTime = self.dLink.timestamp - lastTimeStamp;

    - (void)start {
        self.dLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(fpsCount:)];
        [self.dLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    }
    
    // 方法执行帧率和屏幕刷新率保持一致
    - (void)fpsCount:(CADisplayLink *)displayLink {
        if (lastTimeStamp == 0) {
            lastTimeStamp = self.dLink.timestamp;
        } else {
            total++;
            // 开始渲染时间与上次渲染时间差值
            NSTimeInterval useTime = self.dLink.timestamp - lastTimeStamp;
            if (useTime < 1) return;
            lastTimeStamp = self.dLink.timestamp;
            // fps 计算
            fps = total / useTime; 
            total = 0;
        }
    }
    

    内存使用率

    我们只要从这个结构体里取出 phys_footprint 字段的值,就能够监控到实际物理内存的使用情况了
    uint64_t memoryUsage() {
        task_vm_info_data_t vmInfo;
        mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
        kern_return_t result = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t) &vmInfo, &count);
        if (result != KERN_SUCCESS)
            return 0;
        return vmInfo.phys_footprint;
    }
    

    耗电优化

    判断哪个线程CPU使用率高

    我们还是先反过来看看出现电量问题的期间,哪个线程是有问题的。

    通过这种方法,你就可以快速定位到问题,有针对性地进行代码优化。遍历线程中的threadBaseInfo->cpu_usage字段,大于临界值比如900的打印出调用堆栈.

    I/O 操作要怎么优化

    业内的普遍做法是,将碎片化的数据磁盘存储操作延后,先在内存中聚合,然后再进行磁盘存储。碎片化的数据进行聚合,在内存中进行存储的机制,可以使用系统自带的 NSCache 来完成。

    每次读取图片时,会检查 NSCache 是否已经存在图片数据:如果有,就直接从 NSCache 里读取;如果没有,才会通过 I/O 读取磁盘缓存图片。

    性能优化:

    影响发热耗电的因素总结:

    1、CPU使用率:CPU的功耗是各个元器件最高的,是引发耗电的首要因素

    2、网络流量:信号较好时,wifi和4g的耗电量差不多的,WiFi信号较差时,4g的耗电量可达WiFi的12倍

    3、GPS:GPS定位模块也是耗电大户,持续使用GPS定位1分钟可引起系统发热

    4、IO总量:IO设置频繁使用一定程度上会增加系统耗电

    5、屏幕亮度最亮是平度亮度(0.3)耗电的4倍

    监控方案总结:

    1、流量控制:在信令通道和HTTP通道建立统一的监控机制,记录各业务流量

    2、GPS监控:GPS模块的权限统一管理,记录各个业务使用时长

    3、CPU监控:CPU使用超过阈值时通过定时抓取线程堆栈辅助分析

    相关文章

      网友评论

          本文标题:性能监控、耗电优化

          本文链接:https://www.haomeiwen.com/subject/ythqnhtx.html