文档章节

Android native Memory分析

adgkns
 adgkns
发布于 2014/02/17 00:18
字数 444
阅读 3834
收藏 7

本文将分析Android native memory的使用状况及通过一些手段来定位到native memory leak代码。

在EngLoad上执行以下adb命令


$ adb shell setprop libc.debug.malloc 1  
$ adb shell stop  
$ adb shell start


然后等手机重新启动后,链接DDMS就可以看到每个SO文件占用的内存大小了。一般占用很大的比较可能发生内存泄露。

(此图片引用自网络)

还有一种复杂的分析方法是结合process showmap, process maps及 process coredump3个文件来定位内存泄露代码,此方法可以直接定位到内存泄露代码,但需要是ENG版的手机和工程symbols文件。

首先,从process showmap文件中找出占用Memory最大的.so文件。

362148 289012 288412 0 648 0 288634 1590 [anon:libc_malloc]

可以看到上面native分配占用了288412 Bytes约288M内存。

然后,输入arm-linux-androideabi-gdb进入gdb

(gdb)file <product_name>/symbols/system/bin/app_process (需要调试的程序)

(gdb)set solib-search-path <product_name>/symbols/system/lib(设置搜索的Symbols文件)

(gdb)core-file coredump (即process coredump文件) (检查内存及寄存器)

(gdb)source core_parser_leak_info_v0.1.gdb(解析内存分配点)

可以看到

alloc_size = alloc_num * size_per_alloc

270MBytes = 49252 * 5760

alloc_bt:

bt:0x7a215c

bt:0xfffffffc

接着,从process maps中可以看到

0064f000-008d0000 r-xp 00000000 b3:05 1296 /system/lib/libskia.so

由于0x7a215c 在libskia.so的地址范围内0064f000-008d0000,可以断定是libskia.so发生了内存泄露。

计算地址偏移0x7a215c - 0064f000 = 0x0015315c

最后,使用arm-linux-androideabi-addr2line 来定位代码

arm-linux-androideabi-addr2line -C -f -e <product_name>/symbols/system/lib/libskia.so 0x15315c

SkImageDecorder::onDecodeSubset(SkBitmap* , SkIRect const&)

external/src/images/SkImageDecorder_libjpeg.cpp:2874

参考文献:http://source.android.com/devices/native-memory.html

© 著作权归作者所有

adgkns
粉丝 15
博文 47
码字总数 16222
作品 0
广州
程序员
私信 提问
加载中

评论(1)

球球的爸爸
球球的爸爸
请问这一步是怎么
(gdb)source core_parser_leak_info_v0.1.gdb(解析内存分配点)

可以看到alloc_size的,如何得到core_parser_leak_info_v0.1.gdb?

alloc_size = alloc_num * size_per_alloc

270MBytes = 49252 * 5760

alloc_bt:

bt:0x7a215c

bt:0xfffffffc
Android内存管理、监测剖析

Android内存管理机制 Android内存管理主要有:LowMemory Killer机制,Ashmem,PMEM/ION及Native内存和Dalvik内存管理管理和JVM垃圾回收机制。 LowMemory Killer机制 源码位置drivers/staging...

Jerikc
2015/01/14
0
0
Android Bitmap变迁与原理解析(4.x-8.x)

App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是很多OOM的元凶,不过,在...

看书的小蜗牛
2018/05/22
0
0
Android各版本间API的差异 - Bitmap

概述 Bitmap在API Level 1中就已经有了, 只不过随着SDK更新, Google对它的一些内外部接口/实现进行了一些优化或者调整, 主要是内存资源的管理方面. 差异 内存资源回收: Android 2.3(API Lev...

有初啊
2014/01/16
0
0
Android 终端性能测试——内存篇

前言 做Android QQ性能测试时,内存测试中遇到不少困惑,”各种”内存术语,到底什么意思,怎么获取,这里总结一下。进行的内存测试主要有两个方面,一,OOM的发现和定位,二,同历史版本或竞...

go-skyblue
2014/07/31
0
0
TaintDroid剖析之IPC级污点传播

TaintDroid剖析之IPC级污点传播 作者:简行、走位@阿里聚安全 前言 在前三篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪、Nativ...

阿里聚安全
2016/08/10
101
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
28分钟前
2
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
8
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
4
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部