cpu优化方法

如何看谁拉高了cpu?

  1. cpu高 的时候有没有抓到进程threadtop,从threadtop找到top 3线程和正常场景对比一下就知道是否有异常
  2. 对明显有异常的线程,看下是否抓到simplerperf trace或systrace,从trace中找到高频调用栈是否异常
  3. 如果没有抓到,搭建相似环境,尝试复现后抓取现场
  4. 如果复现不了高cpu bug,从系统打印出来的log入手分析,筛选出top threadid打印出来log,从log中猜测执行了什么任务,以及频率如何?
  5. 如果复现了,但还是找不到,集成asm插桩工具后,抓取systrace,能定位到哪个函数调用最耗cpu

如何降低cpu?

介绍遇到过最多的几类原因,以及如何降下去的

  1. log打印过多,占用了6%(100%)cpu(调高默认日志等级,日志删减)
  2. 系统整体cpu负载高,cpu超过95%(100%),系统响应时间明显延迟(大概率是有进程cpu超标了,如果屏幕多,产品逻辑要求多个app一起运行,也要通过cgroup讲重要的进程绑定到大核上,将不重要的绑定在小核上,极端场景下卡不重要的进程,优先保证重要的场景不卡顿,无延迟
  3. App代码不好导致性能问题,
  • RecyclerView中,每个item 都有一个不停运行的动画,选中1个后开始运行,来回点击不同的item,cpu会越来越高,原因是app:lottie_autoPlay="true"使暂停的动画的item也收到回调,取消选中时cancel掉动画就好了

  • 软件绘制阴影背景时,因为setLayerType(LAYER_TYPE_SOFTWARE之后,每一帧都触发buildsoftwarelayer,改成图片背景

  • 带阴影的imageview在不停旋转时,cpu越来越高, 因为elevation的原因,无法在旋转动画中使用<style name="ShadowStyle ">

    复制代码
        <item name="android:elevation">10dp</item>
        <item name="android:outlineAmbientShadowColor">#12001160</item>
        <item name="android:outlineProvider">bounds</item>
        <item name="android:outlineSpotShadowColor">#80000000</item>
    </style>
  • 放webp 动画占用了%60+ cpu:fresco、glide播放webp动画时,2个glide线程分别以 50ms 1次刷新webp图片(使用帧动画可以降低30%(800%) cpu)

  • 跑马灯,系统MarqueeTextview占用20%(800%),优化后可以降到5%(800%),优化方向是降低MarqueeTextview频率

  • 音频播放时 ,播放上下跳跃的动画占用 25%(800%) cpu:因为自己新建了一个40ms刷新一次的子线程,和16.6ms 刷新1次主线程频率不同步所以导致的主线程随时被唤醒,非常忙碌。解决方法是借用主线程的刷新频率来做动画,3帧刷新1次跳跃动画,cpu降低到7%(800%)

相关推荐
raindayinrain4 分钟前
深入理解Linux内核--ext文件系统,open/write/read/close执行流程,性能优化
linux·性能优化·文件系统·文件系统调用
峥嵘life28 分钟前
Android16 系统 APEX 模块说明
android·大数据·开发语言
2601_962065491 小时前
PHP For 循环
android·java·php
码农coding1 小时前
android12 WindowManagerService窗口的添加过程
android
小小测试开发2 小时前
RAG评测指标实战:忠实度、上下文精确率/召回率从原理到CI落地
android·人工智能·spring boot·ci/cd
前端炒粉2 小时前
容器预热预跳转方案
前端·vue.js·性能优化
一克拉的眼泪很珍贵2 小时前
23 - 综合实战(上):需求分析与架构设计!从零到一构建生产级智能客服Agent
人工智能·ai·性能优化·架构·需求分析
Dovis(誓平步青云)3 小时前
同一条路线在手机和平板上怎样换一种排版
android·开发语言·数据库·智能手机·音视频
firstacui3 小时前
Mysql调优
android·mysql·adb
灵境(虚幻知音)3 小时前
Cesium动态轨迹性能瓶颈深度拆解:翼带与尾迹的底层优化实践
性能优化·cesium·3d引擎·afsim·翼带·尾迹·自定义着色器