记一次 Android CPU高使用率排查

文章目录

  • 背景
  • 排查高占用的进程
    • 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

记一次 Android CPU高使用率排查_第1张图片
在这里插入图片描述

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

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

记一次 Android CPU高使用率排查_第2张图片
高负荷调用的是 Thread-2 和 com.demo.app 线程

kill -3 29337 (生成trace文件)

记一次 Android CPU高使用率排查_第3张图片

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

在这里插入图片描述记一次 Android CPU高使用率排查_第4张图片
根据 Thread-2 线程名匹配到了 对应的 堆栈信息
记一次 Android CPU高使用率排查_第5张图片

定位问题

记一次 Android CPU高使用率排查_第6张图片

补充说明:

上述排查过程适用于 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中对应时刻的堆栈。

你可能感兴趣的:(性能优化,CPU,性能优化)