使用 SIGQUIT 获取 GC 性能信息的步骤

667 阅读2分钟

使用 SIGQUIT 获取 GC 性能信息的步骤

简要说明

可以使用GC 时序转储和 Systrace去衡量GC性能,在这篇博文中就先讲使用时序转储。对于时序转储的本质就将 SIGQUIT 发送给正在运行的应用,并造成一次ANR事件,此时会转储与其锁定、线程堆栈和 GC 性能相关的信息。
对于使用GC时序转储,需要做一下前期工作,比如获取应用包名并使用报名定位到应用运行的进程号。
官网上给出的步骤略为简单,以下教程详细地给出获取GC性能信息的步骤,特别注意一定要定位出输出GC转储文件的名称,不然会报出找不到文件的错误,必须在adb root权限下进行GC转储文件的获取,不然会permission deny

获取应用包名的方法

获取应用包名的方法有如下几种,其中一些方法也可获得App相应Activity的信息,这里做出了总结,任选其一即可

通过adb shell获取应用包名以及Activity

  • adb shell am monitor
    在命令行里输入如下命令,然后启动要测试的应用,此时便会输出正在运行的应用的包名
// 这里启动firfox,并且输出包名
adb shell am monitor

在这里插入图片描述

  • adb shell pm list package
adb shell pm list package

在这里插入图片描述

  • adb shell dumpsys window w | grep / | grep name=
adb shell dumpsys window w | grep \/ | grep name=

在这里插入图片描述

通过解析apk信息获取应用包名

  • aapt dump badging /路径/com.taobao.taobao.apk | grep package
    使用aapt解析apk并查找包名
aapt dump badging /home/Downloads/com.taobao.taobao.apk | grep launchable-activity

在这里插入图片描述

获取该APP 的PID

  • 在命令行中输入如下命令,即可获得该APP的PID
adb shell pidof yourapp.packagename

在这里插入图片描述

使用 SIGQUIT 获取 GC 性能信息

  1. 进入adb root 权限
adb root
  1. 输入以下命令以获得 GC 时序转储,注意官网教程这里写的是大写S,但是正确命令是小写s
adb shell kill -s QUIT PID
  1. 这时会在手机内核 /data/anr/ 中创建一个文件,可使用以下命令查看创建的文件名称
adb shell
cd /data/anr/
ls -a
  1. 输入以下命令pull出已在运行的应用的 GC 时序转储
adb pull /data/anr/trace_xx.txt
  1. 如果不确定是哪个文件,也可将/data/anr/全部pull出,再对照创建时间去确认(这是一个笨办法哈哈哈哈)
adb pull /data/anr/

在这里插入图片描述

参考链接
source.android.com/devices/tec…