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

性能监控、耗电优化

作者: 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使用超过阈值时通过定时抓取线程堆栈辅助分析

相关文章

  • 性能监控、耗电优化

    线上性能监控,主要集中在 CPU 使用率、帧率和内存这三个方面。 CPU使用率 App 作为进程运行起来后会有多个...

  • 08 性能优化-耗电优化-耗电监控

    利用Hook方式监控排查耗电 Java Hook Hook 方案的好处在于使用者接入非常简单,不需要去修改自己的代...

  • iOS性能优化 - 整理

    本文主要包含: 性能优化 - 卡顿性能优化 - 耗电优化性能优化 - APP启动优化安装包瘦身 一  性能优化 -...

  • 对于手游的优化

    给手游做优化,无非就CPU性能优化、内存性能优化、资源优化、GPU优化、IO优化、网络优化、耗电优化这些,为此汇总...

  • 性能优化 - 耗电优化

    尽可能减少CPU GPU的功耗 少用定时器 优化文件I/O操作尽量不要频繁写入小数据,最好批量一次性写入读写大量数...

  • 性能优化-耗电优化

    耗电优化 耗电检测工具 Battery Historian是一款Google提供的Android系统电量分析工具,...

  • Android性能优化

    Android性能优化 Android 性能优化的方法 性能问题一般分为3类 UI卡顿 内存问题 耗电问题 布局优...

  • APP耗电性能优化

    APP耗电性能优化 一、主要耗电量原因 1、CPU 处理2、网络3、定位4、图像处理,GPU 二、优化 1、尽可能...

  • 08 性能优化-耗电优化-绘制耗电

    检测错误的UI绘制刷新导致的耗电 排除由于错误的绘制方法,导致CPU占用过高,进而导致耗电量高 检测方式参考大众点...

  • iOS性能优化 - 耗电优化

    对象的本质 OC对象的本质是结构体,结构体内部是一个指针; 1、引申:一个OC对象最少占用几个字节? 一个指针占用...

网友评论

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

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