android内存分析工具集【0】 您所在的位置:网站首页 adb抓手机日志 android内存分析工具集【0】

android内存分析工具集【0】

2024-07-09 02:40| 来源: 网络整理| 查看: 265

我们对于Zygote fork出来的process,如APP以及system_server,都会进行Java运行环境分析。其关键是分析Java Heap,以便快速知道某个Java变量的值,以及Java对象的分布和引用情况。

通常Java Heap的分析方式则是抓取Java Hprof,然后使用MAT等工具进行分析。

* 抓取Hprof的手法,如:

第一种方式:使用am 命令(抓取Hprof的手法)

   adb shell am dumpheap {Process} file

   如: 

 adb shell chmod 777 /data/anr

 adb shell am dumpheap com.android.phone /data/anr/phone.hprof

 adb pull /data/anr/phone.hprof

下面这方法是抓取trace.txt日志文件中,在此处记录一下,

1.1 抓取的方式 * 在ENG Build 中 adb remount adb shell chmod 0777 data/anr adb shell kill -3 pid adb pull /data/anr

* 在User Build 中 没有root 权限的情况下,只能直接pull 已经存在的backtrace. adb pull /data/anr

* 你可以尝试直接使用下面的脚本一次性抓取 adb remount

adb shell chmod 0777 data/anr

adb shell ps

@echo off set processid= set /p processid=Please Input process id:

@echo on adb shell kill -3 %processid%

@echo off ping -n 8 127.0.0.1>nul

@echo on adb pull data/anr/traces.txt trace-%processid%.txt

pause

 第二种方式:使用DDMS 命令

 在DDMS中选择对应的process,然后在Devices按钮栏中选择Dump Hprof file,保存即可

 第三种方式:通过代码的方式

   在android.os.Debug这个class 中有定义相关的抓取hprof 的method。

 如: public static void dumpHprofData(String fileName) throwsIOException;

 这样即可在代码中直接将这个process的hprof 保存到相对应的文件中,注意这个只能抓取当时的process。

 如果想抓其他的process的hprof,那么就必须通过AMS帮忙了。

 可以先获取IActivityManager接口,然后调用它的dumpheap方法。具体的代码,大家可以参考

 frameworks/base/cmds/am/src/com/android/commands/am/am.java中的调用代码

第四种方式:发送SIGUSER1 

   在部分机器中,如果具有root权限,可以直接发送SIG 10来抓取,此时对应的Hprof保存在/data/misc下面,文件名如:

 heap-dump-tm1357153307-pid1882.hprof

* 快速分析

首先, DVM的Hprof 和标准的Java Hprof 有一些差别,需要使用hprof-conv进行一次转换,将DVM格式的hprof 转换成标准的java 命令的hprof

   hprof-conv in.hprof out.hprof

其次,使用如MAT Tool,打开转换后的hprof文件,通常我们会

 analysis java thread information

 analysis java var value

 analysis Object reference

 analysis GC path

具体如何使用MAT分析可以参考MAT 的官方网站。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有