第49讲 perfetto 内存分析之分析native heap|极客笔记-凯发k8手机登录

本讲是android camera性能分析专题的第49讲,我们介绍perfetto内存分析之使用perfetto来分析native heap。

更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera
星球id: 17296815
wechat 极客笔记圈

如何查看某个进程的native heap用量

可以执行:

dumpsys meminfo [pid/pkg]

下图是高通camera hal的预览过程中的meminfo

如何查看某个进程的native heap用量

heapprofd简介

heapprofd 通过hook malloc/free 和 c 的 operator new/delete 调用来对heap分配进行采样。给定一个 n 字节的采样间隔,平均每分配 n 字节就会对一个分配进行采样。默认的采样率是 4096 字节。

heapprofd简介

哪些进程是profileable的

不同android版本,各进程能否被profile情况

哪些进程是profileable的

critical native service定义在中

app进程标记为profileable
哪些进程是profileable的

heapprofd配置文件说明

参考:https://s.deepinout.com/android-14.0.0_r2/xref/external/perfetto/protos/perfetto/config/profiling/heapprofd_config.proto

常用的配置

heapprofd配置文件说明

field description
process_cmdline 想profile的cmdline
pid 想profile的pid
sampling_interval_bytes 采样的字节间隔,每隔多少字节采样一次,默认4096
shmem_size_bytes profiled进程和heapprofd之间的共享内存大小,默认8mb,最大500mb
block_client 当shmem buffer满了后,不停止trace而是block住client
no_startup 不要profile开始运行的进程,only match processes on startup,与no_running互斥。
no_running 不要profile正在运行的进程,only match processes on startup,与no_startup互斥。

continuousdumpconfig如下

field description
dump_phase_ms 第一次dump等待的时间
dump_interval_ms 两次dump之间的时间间隔

如何按需主动触发一次dump

除了continuous dump外,我们可以在profile过程中主动触发dump,执行

adb shell killall -usr1 heapprofd

应用场景:
想记录特定场景/时刻,某进程的内存情况,比如在自动化测试中,拍照结束后马上出发一次dump

heapprofd dump实战分析

heapprofd dump实战分析

  • unreleased malloc size: 申请未释放的buffer大小
  • unreleased malloc count:申请未释放的malloc次数
  • total malloc size:总的申请buffer大小(包括已释放的)
  • total malloc count:总的申请buffer次数(包括已释放的)

heapprofd vs malloc_info() vs rss

heapprofd

  • c/c 内存分配角度(malloc/new)记录内存的使用情况

malloc_info

  • 从分配器(allocator)角度记录内存的使用情况,userdebug 通过如下命令抓取(app进程)
am dumpheap -m  /data/local/tmp/heap.txt
  • 通常这里记录的内存使用量比heapprofd记录的要大,主要取决于allocator是否会马上释放内存,以jemalloc为例,在thread中会cache一会儿freed的内存

heap rss

  • 从操作系统角度看申请了多少内存,执行如下命令可以查看
adb shell dumpsys meminfo 
  • 通常比heapprofd和malloc_info要大一点,因为一般实际申请内存会按照page对齐要求
  • 在支持zram的平台,也可能会出现比heapprofd和malloc_info要小一点,因为内存被swap到zram去了

三者的关系

a heapprofd malloc_info rss
from native startup
after zygote init process
before zygote init process
thread caches
page对齐

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera性能分析

网站地图