记一次 Android CPU高使用率排查

背景

测试同学反馈我们的App CPU使用率 90% 居高不下,经过一番艰难的排查后定位到了问题,为了记录此次过程于是有了此博客的构思,但为了避免隐私泄露,本文使用的是demo工程,但是排查思路完全一致

排查高占用的进程

adb shell

top

在这里插入图片描述
在这里插入图片描述

我们发现 com.demo.app CPU占用率竟然高达 93.3%, 对应的 pid 是 29337

top -b -H -n 1 | grep 29337 (打印各线程 cpu使用详情)

在这里插入图片描述
高负荷调用的是 Thread-2 和 com.demo.app 线程

kill -3 29337 (生成trace文件)

在这里插入图片描述

adb pull /data/anr /Users/gerry.liang/Desktop

在这里插入图片描述在这里插入图片描述
根据 Thread-2 线程名匹配到了 对应的 堆栈信息
在这里插入图片描述

定位问题

在这里插入图片描述

补充说明:

上述排查过程适用于 CPU 居高不下 或者 内存居高不下
如果CPU在某段时间较高但是之后就下降了就不好排查了, 不过也有笨方法

  1. CPU 每隔1s 打印线程使用情况 while true;do top -b -H -n 1 | grep 1597 |head -n 5;sleep 1;done
  2. CPU 每隔1s 生成 trace文件 while true;do kill -3 1597;sleep 1;done

先找1中CPU使用率异常的时刻和对应的线程名, 再找 2中对应时刻的堆栈。

相关推荐

  1. kafka消息积压的排查

    2024-02-03 09:32:05       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-03 09:32:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-03 09:32:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-03 09:32:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-03 09:32:05       20 阅读

热门阅读

  1. JVM学习

    JVM学习

    2024-02-03 09:32:05      35 阅读
  2. MySQL之DQL正则表达式

    2024-02-03 09:32:05       32 阅读
  3. 数据库指定某个列的某个值优先排序

    2024-02-03 09:32:05       31 阅读
  4. H5调用安卓原生相机API案例

    2024-02-03 09:32:05       31 阅读
  5. 【设计模式之装饰器模式 -- C++】

    2024-02-03 09:32:05       36 阅读
  6. 前端工程化之:webpack1-12(常用扩展)

    2024-02-03 09:32:05       36 阅读