内存泄漏--抓取.hprof文件的方法总结

jvm调优-hprof 文件打开 如何打开hprof后缀格式的文件呢?当服务器出现内存溢出的情况,要下载分析dump内存文件“在当前目录xiazaihprof文件到本地。我们就可以查看 hprof文件内容了。装入时注意选择 下面的文件格式。 阅读详情
AI摘要

本文介绍四种安卓应用内存分析方法:Android Studio抓取hprof文件、DDMS工具使用、adb命令行操作及MAT工具抓取。文章详细解释每种方法的具体步骤、注意事项及文件转换过程。

1、AS抓取文件

 

(1)遇到的问题及解决:

(1-1)android studio no debuggable processes

(1-2)解决办法

(a)Tools->Android->勾选上Enable ADB Integration

(b)重新布置app

 

(2)下图为用as抓取hprof文件中Monitors-----》Memory中的按钮含义

 

  点击可以开始或者暂停内存检测的按钮。

  点击相当于GC操作的按钮,会回收能够回收掉的内存释放空间。

  点击可以直接收集当前检测中hprof文件,生成.hprof结尾文件(点击这个按钮收集之前要先点击GC按钮回收能回收的)。

  点击开始标记某一时间点然后根据自己需求在某一时间点再次点击可以收集到对应检测的时间段内线程中的内存情况,生成.alloc结尾的文件。

 

(3)点击下图图标生成hprof文件

 


(4)查看生成hprof文件目录

点击Studio的最左侧-----Captures

 

双击该文件,在as中显示如图

 

(5)将生成的hprof文件导出

   该文件,右键选择 Export standard .hprof,选择存放目录即可


Ps:

as生成的文件直接可以用MAT打开

 

2、DDMS抓取文件

 

(1)打开DDMS

     通过Android Studio 打开DDMS的步骤如下

 

(2)选中需要查看的程序,并且点击Update Heap图标

 

(3)查看Heap情况

 

但是这仅仅是查看一下Heap的使用情况,那如果发现内存占用或者溢出很严重,动不动就OOM了。通过这个是看不出什么东西的,这个时候就需要把Heap抓出来分析,在UpdateHeap边上还有一个按钮。

 

(4)生成.hprof文件

 

点一下,会生成一个文件

(刚生成的.hprof文件---以进程名为文件名)

 

Ps:

   DDMS生成的文件需要转化,才可以用MAT打开

 

 

3、adb命令抓取文件

(1)命令行提取hprof文件

(1-1)2种方式

(a)通过进程名

#adb shell am dumpheap <processname> <FileName><hprof文件的名>

在当前用户下执行命令

(b)通过PID

#adb shell am dumpheap <PIDxxx> <FileName><hprof文件的名>

(1-2)#adb pull <FileName> <Dir>


Ps:

   DDMS生成的文件需要转化,才可以用MAT打开

 

4、用MAT工具抓取文件

 

(1)打开工具MAT;

(2)选择File------》Acquire Heap Dump 如下图

 

(3)在图中看到根据正在运行的进程PID,导出相应的文件

 

文件存放到所选目录,同时MAT可以打开分析

 

 

Ps:

MAT抓取的文件直接可以用MAT打开

 

 

 

存在的问题:

(1)根据显示的进程PID,通过cmd,执行adb shell ps 查看进程PID没有与之匹配的,就不知道抓取的是哪个应用的泄漏文件;

(2)相同的PID内存泄漏文件,使用MAT分析的时候饼状图不一样;

 


 

 注解:

 格式转化(可以用MAT打开的)

(1)用DDMS生成的.hprof文件需要转换后才可以用MAT打开,转换步骤如下。

1)、把生成的.hprof文件复制到hprof-conv所在目录(在SDK安装目录下的platform-tools文件夹下)。

2)、打开CMD命令行,输入hprof-conv xxxxx.hprof yyyyy.hprof(其中xxxxx.hprof为原先生成的hprof文件,yyyyy.hprof为转换之后hprof)。

(2)具体例子:

#/android-sdk/platform-tools/hprof-conv <FileName> <newFileName>.hprof

 

 

 

 

 

用adb命令未实现的:

(1) 命令行方式抓取,方法如下:
a) 通过输入adb命令的方式抓取,PIDXXX为对应进程的PID:
   adb remount
   adb shell chmod 0777 /data/misc
   adb shell kill -10 PIDXXX
b) 会在/data/misc目录下生成一个以pidXXX.hprof结尾的hprof文件。
c) 然后通过adb pull或其他方式将这个文件导出来即可。

 

(2)问题:

可以导出内容,但是么有.hprof文件呢???

 

 

注解:

777=4+2+1    4+2+1   4+2+1   
         用户     组     其他

    chmod 777 file 给一个文件改权限

 

总结:

(1)暂时总结了4种抓取文件的方法,1和4是不需要转化的,2和3需要转化才可以员工MAT打开;

(2)没有问题的可以实施的是方法1、2和3;

(3)方法4 :问题不知道那个进程;

(4)命令还可以抓取但是未实现,不知道问啥?


03)阿里 Arthas(阿尔萨斯)开源的 Java 诊断工具使用-排查web项目请求后响应超时或响应慢;trace、stack、profiler、主动生成hprof 文件排查OOM指令使用 阿里 Arthas(阿尔萨斯)开源的 Java 诊断工具使用-排查web项目请求后响应超时或响应慢;trace、stack、profiler指令使用 阅读详情

相关推荐

Android内存泄漏实战:手把手教你用adb shell am dumpheap抓取hprof文件并分析

本文详细介绍了在Android开发中,如何通过adb shell am dumpheap命令从命令行精准抓取堆转储文件,并使用hprof-conv工具进行格式转换,最后利用MAT工具进行深度内存泄漏分析。这套方法尤其适用于自动化测试、批量处理和复杂场景下的内存问题排查,帮助开发者摆脱IDE依赖,构建高效的内存分析工作流。

k6l7m8n9的博客 906

hprof 文件查看

https://www.jianshu.com/p/4e6e88f1d211 hprof 文件是 Java 的 内存快照文件(Heap Profile 的缩写),格式为 java_pid*.hprof 用于分析 OOM: OutOfMemoryError(堆)内存不足错误 是 JVM 设置 -XX:+HeapDumpOnOutOfMemoryError 参数时打印的内容(阿里规范有提到)JVM 配置简洁说明 - 简书 JDK自带Java Visual VM工具查看 jvisualvm.exe

yygr的博客 1万+

告别OOM!用Android Studio Profiler分析hprof文件,快速定位Activity泄漏

本文详细介绍了如何使用Android Studio Profiler分析hprof文件,快速定位Activity内存泄漏问题。通过实战指南,开发者可以掌握生成hprof文件的技巧、Profiler的核心功能解析以及典型内存泄漏模式的解决方案,有效避免OOM错误,提升应用性能。

weixin_30263277的博客 503

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

.hprof 文件:是 java 项目的 Heap Dump 文件,也叫内存映像文件、内存快照文件,可以存放一个 java 进程在某个时间点的内存快照。生成 Heap Dump 文件的方式有两种:一是使用 `jmap` 命令手动导出,二是启动脚本中添加 `-XX:+HeapDumpOnOutOfMemoryError` 参数自动导出。本文中只涉及第二种。

ACGkaka的博客 2万+

Android内存泄漏排查实战:用Android Studio Profiler分析hprof文件,定位Activity/Fragment泄漏

本文详细介绍了如何使用Android Studio Profiler分析hprof文件,精准定位Android应用中的Activity/Fragment内存泄漏问题。通过实战案例和高级技巧,帮助开发者掌握内存泄漏排查的核心方法,提升应用性能。

weixin_30666401的博客 294

hprof是什么文件?可以删除吗

hprof是什么文件? 是java进程的内存镜像文件,里面包含了内存堆详细的使用信息。 hprof文件可以删除吗 *.hprof的文件比较大,通常几十个G,有可能是错误日志类文件,运行正常是可以删除的。 类似于飞机黑匣子数据。没有问题可以删除,但是有问题可以从这些文件查看。 ...

清平乐的技术专栏 3万+

Android内存泄漏 java内存分析

文章目录1.打开AndroidStudio的Profile2.抓取内存快照3.内存分析 1.打开AndroidStudio的Profile 1.在菜单栏依次点击 View > Tool Windows > Profiler 2.在Profile窗口点击左上角的"+"图标,添加要分析的进程 3.点击MEMORY进入内存详情界面 如下图所示一个应用的内存包括:java,native...

zxlworking1的专栏 555

【项目实战】在 IntelliJ IDEA 中打开 `.hprof` 文件(Java 内存快照文件)

文件(Java 内存快照文件)的步骤如下,结合不同版本的特性说明:通过以下方法,用户可以直接在 IDEA 中完成内存快照的初步分析,无需依赖外部工具。如需更深入分析,建议导出数据到专业工具(如 MAT)。在 IntelliJ IDEA 中打开。

奶爸的编程之路,也就一周冷个三天 4710

Activity内存泄漏分析

Activity内存泄漏分析前言问题背景使用dumpsys meminfo获取应用内存信息DDMS抓取hprof文件MAT分析hprof 前言 这是第一次书写博客,工作也有几年了,虽然写了很多的笔记,但是都属于闭门造车,有时候也不知道自己记录的经验有没有问题,或者是不是有理解不到位的地方。因此想做一下改变,将自己记录的东西发到博客上,集思广益。如果我的博客对解决你的问题有帮助,那也是一件不错的事情。如果觉得我分享内容有错误,也请指出来,方便本人改正免得误导大家。好了,接下来开始分享一下我最近遇到的一个Act

java_csdn_1的博客 1770

memory监控方法

监控android系统各个内存占用(java,native,gpu显存....)

langjian2012的专栏 718

Windows下即用型安卓调试工具包:ADB+Fastboot及配套分析工具全集成

专为Windows环境打包的轻量级安卓开发调试工具集合,开箱即可运行,无需安装完整Android SDK。核心包含adb.exe,支持设备连接识别、APK安装卸载、实时日志(logcat)抓取、adb shell命令行交互、端口转发等日常调试操作;fastboot.exe提供刷写boot/recovery/system等分区、解锁Bootloader、烧录官方或自定义镜像等底层固件操作能力。同步集成sqlite3.exe用于查看和导出Android应用SQLite数据库;hprof-conv.exe转换Ja

n8m7b6v5c4的博客 277

Android内存优化,一定看这篇内存泄漏排查笔记

因为"Android 的 hprof"和"标准 JVM 的 hprof"是"同名不同格式"‌——Android 版是个私有变体,而 MAT、YourKit、jhat 这类通用分析工具是按 ‌J2SE(标准 Java)hprof 规范‌写的,读到 Android 变体会解析失败。分析hprof定位相关的内存问题一般最常用的是MAT工具分析,后面google又推自己的ahat工具和perfetto工具,但说实话使用体验来说还是建议大家首选mat工具。相反,GC 根是其最近的支配者。为此,我们使用支配树。

learnframework的博客 219

SIwave仿真手册——软件基础(一)

最近在学习SIWAVE,在这里将自己的笔记整理一下,做一个专题。希望对大家有帮助,这个会持续更新的。仅限于软件操作学习,不涉及信号完整性的讨论。

luohuo9844的博客 4万+

Android内存泄露利器(全自动篇)

我写了可执行文件启动器Launcher.jar及一些批处理,通过它们就可以自动的以一定的时间间隔提取Hprof和进程的内存信息 一、需要的库 可执行文件启动器:lib\Launcher.jar 注:关于Launcher.jar的源码请参考《可执行文件启动器(上)》和《可执行文件启动器(下)》 二、自动提取Hprof。 runHprofPicker.bat文件: java -

Robin Hu的专栏 2404

Qwen3.6-27B 本地部署踩坑实录:两块 4090 折腾一天的真实记录

《Qwen3.6-27B稠密模型部署实战》摘要:本文记录了在双4090(48GB)环境下部署Qwen3.6-27B-FP8量化模型的全过程。重点解决vLLM服务启动时transformers版本不兼容问题,推荐通过构建自定义Docker镜像升级依赖。详细讲解了关键参数配置,包括128K上下文长度保持、MTP推测解码加速等技术细节,并给出显存优化建议。实测表明该稠密模型在27B参数量级下编程能力超越上一代397B MoE模型,单卡即可流畅运行FP8版本,输出速度达90token/s,是开发者理想的编程助手。文

Fzuim的博客 2765

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由下keep-alive缓存失效的根本原因,并提供了三种实战解决方案:通过路由扁平化根治问题、利用状态管理精细模拟缓存效果,以及借助keep-alive-vue3插件快速修复。文章旨在帮助开发者彻底理解Vue Router与keep-alive的协作机制,从而根据项目情况选择最佳策略,有效解决页面状态丢失的难题。

weixin_29015801的博客 285

常用内存分析命令及常见内存泄露分析思路

adb 命令 使用android shell命令查看内存使用情况 单位为千字节 KB adb shell dumpsys meminfo pkgname 示例 adb shell dumpsys meminfo top.ftas.demo.leaked # 查看 Java Heap 大小 adb shell dumpsys meminfo top.ftas.demo.leaked|grep Java\ Heap # 查看 Native Heap 大小 adb shell dumpsys m

满地星辰的博客 889

SPICE仿真软件:Ngspice_(2).安装与配置

在Netlist文件中直接定义模型。V1 1 0 5R1 2 0 1k* Analysis库文件中可以包含多种电路元件模型和参数。

kkchenjj的博客 1585

Android 抓取app进程 hprof 文件 内存泄漏 oom

抓取的hprof后,可以使用用hprof-conv 命令将DVM 格式的hprof 转换成标准的java 命令的hprof,这样即可在代码中直接将这个process 的hprof 保存到相对应的文件中,注意这个只能抓取当时的process.在DDMS 中选择对应的process, 然后在Devices 按钮栏中选择。如果想抓其他的process 的hprof, 那么就必须通过AMS 了。提示我们用/data/local/tmp/ 下面。Hprof file, 保存即可。进入adb shell。

Venus 的博客 1893

微信小程序 - 详细解决map地图上使用自定义图标图片或自定义样式进行markers标记点,手机真机运行时安卓系统、苹果ios系统会出现不显示标记点的问题(大概率安卓正常显示标记点,但苹果就加载失败)

微信小程序,map,地图组件,安卓android,苹果ios,真机调试,marker,标记点,在地图上标记,突然就不显示白屏了没动代码,自定义标记点icon,label动态数字,小程序地图markers标记点显示不出来,微信小程序map组件,地图加载后marker标记点ios设备不显示,android正常显示,添加多个标记点。安卓能正常显示标记点图标,IOS设备不显示标记点图标,map地图白屏不显示标记,图标真机调试不显示,自定义图标,报错,页面白屏,不报错也不显示,无法加载,图片展示不出来,iconPat

✅ 精选推荐文章 5956

SpringBoot实现快速导入EXCEL

MaterialMonitorController.java @Log(title = "物料监测", businessType = BusinessType.IMPORT) @RequiresPermissions("system:materialMonitor:import") @PostMapping("/importData") @ResponseBody ...

LEN程序员的一生 4817

android hprof 文件分析,Android内存泄漏 java内存分析

1.打开AndroidStudio的Profile1.在菜单栏依次点击 View > Tool Windows > Profiler2.在Profile窗口点击左上角的"+"图标,添加要分析的进程3.点击MEMORY进入内存详情界面如下图所示一个应用的内存包括:java,native,graphics,stack,code,other,我们这次只对java的内存进行分析2.抓取内存快照...

weixin_39968760的博客 1470

最新Codex接入DeepSeek官方API教程(无需cc-switch)

最新Codex接入DeepSeek官方API教程(无需cc-switch)

猿小白的博客 937

告别卡顿!用Android Studio Profiler分析hprof文件,快速揪出内存泄漏元凶

本文详细介绍了如何使用Android Studio Profiler分析hprof文件,快速定位和解决内存泄漏问题。通过三层过滤法和实例视图深度诊断,开发者可以高效识别Activity、Fragment等组件的泄漏,并结合自动化脚本和编码规范预防内存问题,显著提升应用性能。

weixin_30911451的博客 514

YOLOv8性能突破:DySample超轻量动态上采样算子的创新应用与实现【附保姆级代码】

YOLOv8(You Only Look Once Version 8)作为YOLO系列模型的最新版本,延续了高效、准确的目标检测优势。其基础结构包含了骨干网络(Backbone)、检测头(Head)、以及特征融合层(Neck)。在特征融合阶段,YOLOv8需要对不同尺度的特征图进行上采样,以便将低分辨率的特征与高分辨率的特征进行融合。传统的上采样操作多使用插值(如双线性插值)或固定卷积,而这些方法可能无法很好地适应复杂的上下文信息。

一键难忘的博客 3120

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

从内存导出文件HProf查看内存变量内容

HProf文件是Java/Android的内存dump文件。提到HProf文件,大家首先能想到的肯定是用于分析内存泄漏。而且目前看到的工具,基本上也都只支持用HProf来进行内存泄漏的分析。不过HProf文件除了分析内存泄漏,还可以查看内存的内容,也就是可以查看类中各个变量的值。 ​ 查看内存内容有什么作用呢, 主要有如下几个用途: ​ 1.协助进行内存泄漏的分析,通过分析某个实例的内容,从而进一步定义实例是什么地方分配的。比如一个有一些Bitmap怀疑泄漏的,但是从引用关系来却看不出它的来源,如果分

QTrace_PyformUI的博客 3297

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 探究Android的冷启动优化
下一篇: Android 判断是否是Rtl
Happy_Develop_
博客等级 码龄12年 26粉丝 99原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值