当前位置: 首页 > news >正文

安卓内存泄露之DMA-BUF异常增长:Android Studio镜像引起DMA内存泄露

安卓内存泄露之DMA-BUF异常增长:Android Studio镜像引起DMA内存泄露 - Wesley’s Blog

今天用着安卓 14 的板子的时候突然系统卡死。

查看日志发现launcher都被干掉了

03-04 06:13:35.544 7872 8479 I ActivityManager: vis BFGS 18740: com.android.launcher3 (pid 8407) service

03-04 06:13:35.544 7872 8479 I ActivityManager: com.android.launcher3/com.android.quickstep.TouchInteractionService<=Proc{8077:com.android.systemui/u0a70}

03-04 06:13:36.155 277 277 I lowmemorykiller: Kill ‘com.android.launcher3’ (8407), uid 10071, oom_score_adj 100 to free 39504kB rss, 46224kB swap; reason: device is low on swap (91200kB < 199552kB) and thrashing (200%)

dumpsys meminfo发现DMA-BUF占了3G多(4G设备),应用free ram基本没了。

刚开始以为是scrcpy的问题。后来经调查发现是android studio的屏幕镜像问题。

分析

开机一段时间后

Total RAM: 3,991,080K (status normal)

Free RAM: 1,166,810K ( 124,454K cached pss + 623,088K cached kernel + 419,268K free)

DMA-BUF: 1,477,628K ( 876K mapped + 1,476,752K unmapped)

DMA-BUF Heaps: 1,477,628K

DMA-BUF Heaps pool: 249,088K

​ GPU: 202,320K

Used RAM: 2,763,593K (1,036,373K used pss + 1,727,220K kernel)

Lost RAM: 195,490K

​ ZRAM: 72,700K physical used for 215,296K in swap (1,995,536K total swap)

Tuning: 192 (large 512), oom 322,560K, restore limit 107,520K (high-end-gfx)

cat /sys/kernel/dmabuf/buffers/*/size,发现有好多483328字节的 inode

cat /sys/kernel/dmabuf/buffers/*/size | grep 483328 | wc -l

有2957个,计算:2957*483328=1429200896=1.4G,和上面的结果差不多。

随便查看一个inode

roc_rk3588s_pc:/ # lsof | grep -w 7248

c2@1.1-service 543 mediacodec 2553u 0000 0,8 0t0 7248 /dmabuf:system

main 4146 root 5088u 0000 0,8 0t0 7248 /dmabuf:system

main 4146 root 5089u 0000 0,8 0t0 7248 /dmabuf:system

lsof | grep "4146" | grep dmabuf | wc -l

有2958条这样的条目

main 4146 root 5973u 0000 0,8 0t0 7690 /dmabuf:system

和上面的数目一一对应

查看是哪一个程序

roc_rk3588s_pc:/ # cat /proc/543/cmdline

/vendor/bin/hw/android.hardware.media.c2@1.1-service

roc_rk3588s_pc:/ # cat /proc/4146/cmdline

app_process/data/local/tmp/.studiocom.android.tools.screensharing.Main–socket=screen-sharing-agent-8055–flags=16

发现是android studio镜像导致的:应该是因为一直黑屏导致反复申请内存导致DMA-BUF泄露。

关闭Android Studio的Device Mirroring功能后,后面使用设备就正常了。

img

dmabuf_dump

通过dmabuf_dump命令可以更快地查看异常程序

roc_rk3588s_pc:/ # dmabuf_dump -h

Usage: dmabuf_dump [-abh] [per-process/per-buffer stats]

-a show all dma buffers (ion) in big table, [buffer x process] grid

-b show DMA-BUF per-buffer, per-exporter and per-device statistics

-h show this help

​ If PID is supplied, the dmabuf information for that process is shown.

​ Per-buffer DMA-BUF stats do not take an argument.

通过dmabuf_dump就可以查看各个程序DMA-BUF的占用情况(包含程序名字、pid、inode等等)或者加其他参数输出不同结果。

roc_rk3588s_pc:/ # dmabuf_dump 4146

​ main:4146

​ Name Rss Pss nr_procs Inode

​ system 472 kB 472 kB 1 4735

​ system 472 kB 472 kB 1 4736

​ system 472 kB 472 kB 1 4737

​ ------------------(省略几千行)----------------

​ system 472 kB 472 kB 1 7688

​ system 472 kB 472 kB 1 7689

​ system 472 kB 472 kB 1 7690

​ PROCESS TOTAL 1395232 kB 1395232 kB

----------------------

dmabuf total: 1477628 kB kernel_rss: 82396 kB userspace_rss: 1395232 kB userspace_pss: 1395232 kB

参考

Implement DMABUF and GPU memory accounting in Android 12 | Android Open Source Project

相关文章:

  • Python----数据分析(Matplotlib三:绘图二:箱图,散点图,饼图,热力图,3D图)
  • c++新特性之 左右值 lambda 以及“for”
  • qt-C++笔记之ubuntu22.04源码安装Qt6.8.2
  • AF3 _correct_post_merged_feats函数解读
  • 解决VSCode鼠标光标指针消失
  • 分布式锁实现方案对比与最佳实践
  • 【计网】数据链路层
  • Glide图片加载优化全攻略:从缓存到性能调优
  • python官方文档阅读整理(一)
  • 2024最新版Java面试题及答案,【来自于各大厂】
  • 【ORACLE】char类型和sql优化器发生的“错误”反应
  • 【工具推荐】在线提取PDF、文档、图片、论文中的公式
  • 数字万用表的使用教程
  • 学习 Wireshark 分析 Android Netlog
  • 什么是SElinux?
  • MongoDB Chunks核心概念与机制
  • 【前端】HTML 备忘清单(超级详细!)
  • 深入探索Python机器学习算法:模型调优
  • vue3,Element Plus中抽屉el-drawer的样式设置
  • 爬虫逆向实战小记——解决captcha滑动验证码
  • 张家港网站建设服务/各引擎收录查询
  • php 网站后台管理系统/专业的网络推广
  • .net网站开发实训代码/黑龙江最新疫情通报
  • 最新手机网站推荐/网络推广方法怎么做
  • 云服务器做网站要备案吗/微信小程序开发公司
  • 请求php网站数据库/企业网站建设推广