文章目录
- 背景
- 排查高占用的进程
- adb shell
- top
- top -b -H -n 1 | grep 29337 (打印各线程 cpu使用详情)
- kill -3 29337 (生成trace文件)
- adb pull /data/anr /Users/gerry.liang/Desktop
- 定位问题
- 补充说明:
背景
测试同学反馈我们的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在某段时间较高但是之后就下降了就不好排查了, 不过也有笨方法
- CPU 每隔1s 打印线程使用情况 while true;do top -b -H -n 1 | grep 1597 |head -n 5;sleep 1;done
- CPU 每隔1s 生成 trace文件 while true;do kill -3 1597;sleep 1;done
先找1中CPU使用率异常的时刻和对应的线程名, 再找 2中对应时刻的堆栈。