使用adb命令导出hprof文件

article/2025/10/13 21:46:58

我们可以使用android studio profiler导入hprof文件分析android应用的内存问题。那么如何从手机上面导出这份文件呢?

把应用的heap 区的数据取出来保存在一个hprof文件上,然后把hprof文件导入到可以查看这个文件的工具上(如android studio profiler),分析里面的数据,为解决我们的应用存在的内存问题而去找出根本问题所在。

在使用adb命令生成hprof文件之前,先运行应用并进行一些操作,尤其是一些能够触发问题的操作。

ADB的全称是Andriod Debug Bridge,安卓调试桥。我们可以用这个工具对手机设备进行一些操作,如安装、卸载和在设备上运行shell命令。我们接下来就是要在手机上运行shell命令。

第一步,查询应用的进程ID

adb shell ps | grep <VALUE> 

上面这条命令是先用adb shell ps列出所有的进程,然后把结果集合通过管道“|”,传递给grep命令进行过滤,grep把带有VALUE的行都列出来,那么我们等一下就筛选出有我们应用包名的行出来就OK,就能找到应用的进程ID。

platform-tools % ./adb shell ps | grep com.example.myleakcanary
u0_a153       2434  1306 14676824 127904 0                  0 S com.example.myleakcanary

2434就是我们的应用com.example.myleakcanary的进程ID(PID)。

第二步,生成应用heap dump的hprof文件

这一步的目的就是把我们安卓应用的heap(堆)区里的数据都导出来。

adb shell am dumpheap <PID> <HEAP-DUMP-FILE-PATH> 

注意:HEAP-DUMP-FILE-PATH是指在手机上的文件路径,千万不要把它写成是你PC上的路径。

platform-tools % ./adb shell am dumpheap 2434 /data/local/tmp/myleakcanaryheapdump.hprof
File: /data/local/tmp/myleakcanaryheapdump.hprof
Waiting for dump to finish...
platform-tools % 

第三步,把hprof文件从手机上拉到PC上

adb pull <HEAP-DUMP-FILE-PATH> <DESTINATION>

HEAP-DUMP-FILE-PATH是hprof文件在手机的文件路径,DESTINATION是PC上的目录,就是我们要把文件放到这个目录,如果不指定就是放在当前目录。

platform-tools % ./adb pull /data/local/tmp/myleakcanaryheapdump.hprof ~/Desktop
/data/local/tmp/myleakcanaryheapdump.hprof: 1 file pulled, 0 skipped. 237.8 MB/s (34774720 bytes in 0.139s)
platform-tools % 

第四步,使用android studio profiler打开hprof文件进行分析

打开android studio, View > Tool Windows > Profiler,点击“+”> Load from file…请添加图片描述
选择导出的文件就可以了。如下图:
在这里插入图片描述

小贴士:
adb命令在sdk/platform-tools这个目录里。其次hprof文件通常都会很大,你的应用运行越久就越大。所以尽量通过android studio profiler分析问题,有必要时再考虑应用的heap dump。

在分享这些内容时,是参考了https://ayusch.com/how-to-capture-heap-dump-from-android/这篇文章的。大家有兴趣可以看看。


http://chatgpt.dhexx.cn/article/c6l6pdo8.shtml

相关文章

jvisualvm分析hprof文件

jvisualvm是jdk8的bin目录下自带的一个分析工具&#xff0c;在我下载的jdk11下没有这个工具&#xff0c;这个工具我们可以用来分析hprof文件 首先我们可以配置对应的参数&#xff0c;配置文件地址在\jdk8\lib\visualvm\etc\visualvm.conf visualvm_default_options"-J-cl…

android studio 分析 hprof,Android Studio 中的 HProf静态分析

HProf 在 Android Studio 中的展示详解&#xff0c;基于我对其的理解&#xff0c;我将其根据 heap,count,size,其他将其分成了 4 个层次。 第一层 Heap 分类 Heap 共分为&#xff1a; zygote heap: 与 android zygote 进程共享的 heap image heap: 与系统共享的 heap app heap&…

JProfile 分析OOM hprof文件

JProfile 分析OOM OutOfMemoryError 1.JVM组成 首先要明白JVM组成 方法区-非堆 Method Area、No-HeapJava栈-虚拟机栈 VM Stack、Java Stack本地方法栈 Native Method Stack程序计数器 Program Counter Register堆 Heap 1.1 OOM发生在哪里? OOM可以发生在除了程序计数器外…

java如何打开hprof_hprof是什么文件?如何打开hprof?

hprof是什么文件&#xff1f;如何打开hprof&#xff1f; 发布时间&#xff1a;2020-03-26 17:35:24 来源&#xff1a;亿速云 阅读&#xff1a;1195 作者&#xff1a;小新 hprof是什么文件&#xff1f;如何打开hprof&#xff1f;很多人都不太了解&#xff0c;今天小编为了让大家…

linux命令生成hprof文件,Android平台生成任意进程的hprof文件

一、知识介绍 1.1 为什么要抓取hprof hprof文件中记录了当前进程内存的使用情况,对于一些难以解决的OOM问题,提取出对应进程的hprof文件可以很好的分析这种问题。 分析hprof的工具 Java Heap Analyzes Tool Eclipse Memory Analyzer 1.2 生成hprof指令 adb shell am dumpheap…

java hprof文件_JVM性能调优监控工具hprof使用详解

一、问题现状 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 …… 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深…

java hprof文件_hprof是什么文件

hprof是什么文件&#xff1f; 是java进程的内存镜像文件&#xff0c;里面包含了内存堆详细的使用信息。 最近学习深入java虚拟机的书&#xff0c;照着里面的例子跑了下。 如何打开hprof&#xff1f; 下面是demo&#xff1a;/** * VM Args&#xff1a;-Xms20m -Xmx20m -XX:HeapD…

Hprof

转载地址&#xff1a;http://geek.csdn.net/news/detail/90509 一、开发者的自测利器-Hprof命令 1. 示例演示 例子程序&#xff1a; /*** PROJECT_NAME: test* DATE: 16/7/22* CREATE BY: chao.cheng**/ public class HProfTest {public void slowMethod() {try {T…

android hprof,Android Hprof 分析

Android Studio 中的 HProf静态分析 HProf 在 Android Studio 中的展示详解&#xff0c;基于我对其的理解&#xff0c;我将其根据 heap,count,size,其他将其分成了 4 个层次。 第一层 Heap分类 Heap 共分为&#xff1a; zygote heap: 与 android zygote 进程共享的 heap image …

android中hprof文件分析

Hprof基本概念 hprof最初是由J2SE支持的一种二进制堆转储格式&#xff0c;hprof文件保存了当前java堆上所有的内存使用信息&#xff0c;能够完整的反映虚拟机当前的内存状态。 格式 Hprof文件由FixedHead和一系列的Record组成&#xff0c;Record包含字符串信息、类信息、栈信…

hprof 文件查看

https://www.jianshu.com/p/4e6e88f1d211 hprof 文件是 Java 的 内存快照文件&#xff08;Heap Profile 的缩写&#xff09;&#xff0c;格式为 java_pid*.hprof 用于分析 OOM: OutOfMemoryError(堆)内存不足错误 是 JVM 设置 -XX:HeapDumpOnOutOfMemoryError 参数时打印的内容…

Java 内存溢出(二)使用 MAT 分析 .hprof 内存映像文件

目录 一、内存溢出时自动导出 .hprof 文件二、下载安装 MAT三、启动 MAT四、MAT 分析 hprof 文件1.Overview 概览2.Leak Suspects 溢出原因猜测3.Histogram 对象实例数量排序4.Dominator Tree 支配树 .hprof 文件&#xff1a; 是 java 项目的 Heap Dump 文件&#xff0c;也叫内…

Solr文档学习--Solrj的使用

首先启动solr solr.cmd startSolrClient 主要通过SolrClient来连接到Solr服务器 SolrClient有4个实现类 CloudSolrClient SolrJ client class to communicate with SolrCloud. Instances of this class communicate with Zookeeper to discover Solr endpoints for SolrClou…

solrj 对solr 的操作

使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法&#xff0c;来操作solr的API的。SolrJ底层还是通过使用httpClient中的方法来完成Solr的操作。 1、 首先&#xff0c;你需要添加如下jar包 其中apache-solr-solrj-3.4.0.jar、slf4j-api-1.6…

SolrJ的使用

CommonsHttpSolrServer CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。 Java代码 String url "http://localhost:8983/solr"; SolrServer server new CommonsHttpSolrServer( url ); String url "http://localhost:8983/solr";Sol…

sorl

solr&#xff1a; 层面搜索、命中醒目显示并且支持多种输出格式&#xff08;包括 XML/XSLT 和 JSON 格式&#xff09;&#xff0c;Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。 安装&#xff1a;http://blog.csdn.net/millery22/article/details/51446014 对外提…

Solr和Solrj的使用

Solr(4.10.3)&Solrj 部署环境 1.拷贝solr solr-4.10.3\example\solr 目录到【如E:/solr/】,重命名solr为solrhome 【E:/solr/solrhome】 solrhome:solr里面有几个文件 collection1:有一个默认名称为collection1的SolrCore索引库 conf&#xff1a;SolrCore运行配置信息 co…

SolrJ的查询

1.solr是一个全文检索引擎系统,通过部署到tomcat下就可以独立运行,通过http协议对外提供全文检索服务, 就是索引和文档的正删改查服务 2. solr直接操作索引库和文档库, 我们的业务系统中可以使用solrJ(solr的客户端,就是一堆jar包)来调用solr服务端, 让solr服务端操作文档库和…

使用solrJ操作solr常用方法

既然学的是java那么肯定需要用java代码来进行对solr的操作&#xff0c;如果知道在solr后台管理界面进行增删改查等操作&#xff0c;那么用solrJ操作solr会更好理解。 solrJ介绍 solrJ是一个用来访问solr的java客户端&#xff0c;提供了索引和搜索的方法&#xff08;将一些常用…

solr快速上手:整合SolrJ实现客户端操作(九)

0. 引言 我们前面学习了solr的服务端基础操作&#xff0c;实际项目中我们还需要在客户端调用solr&#xff0c;就像调用数据库一样&#xff0c;我们可以基于solrJ来实现对solr的客户端操作 1. SolrJ简介 SolrJ 是 Solr官方提供的 Java 客户端库&#xff0c;主要用于与 Solr 服…