-
如何找到谁占用了cpu?
- cpu高的时候有没有抓到进程threadtop,从threadtop找到top 3线程和正常场景对比一下就知道是否有异常
- 对明显有异常的线程,看下是否抓到simplerperf trace或systrace,从trace中找到高频调用栈是否异常
- 如果没有抓到,搭建相似环境,尝试复现后抓取现场
- 如果复现不了高cpu bug,从系统打印出来的log入手分析,筛选出top threadid打印出来log,从log中猜测执行了什么任务,以及频率如何?
- 如果复现了,但还是找不到,集成asm插桩工具后,抓取systrace,能定位到哪个函数调用最耗cpu
-
如何降低cpu?
介绍遇到过最多的几类原因,以及如何降下去的
- log打印过多,占用了6%(100%)cpu(调高默认日志等级,日志删减)
- 系统整体cpu负载高,cpu超过95%(100%),系统响应时间明显延迟(大概率是有进程cpu超标了,如果屏幕多,产品逻辑要求多个app一起运行,也要通过cgroup讲重要的进程绑定到大核上,将不重要的绑定在小核上,极端场景下卡不重要的进程,优先保证重要的场景不卡顿,无延迟
- App代码不好导致性能问题:一言难尽,不再重复
- 内存高的app GC频繁(例如地图导航):在内存充足的系统中,提升GC阈值可以显著减少gc cpu占用
后面介绍一些项目中遇到实际bug:常见的cpu高Case-CSDN博客
如果大家有simpleperf和systrace的分析技巧感兴趣,请在评论区+1,如果有人想了解,我会专门写一篇文章给大家介绍
感谢您抽出宝贵时间读完本文,希望您有收获!能不能动动小手指给个❤鼓励一下我!再走,感激不尽!