万网网站域名,利用wps做网站,小网站如何做密码找回,计算机软件开发流程安卓内存泄露之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) se…安卓内存泄露之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.TouchInteractionServiceProc{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*48332814292008961.4G和上面的结果差不多。
随便查看一个inode roc_rk3588s_pc:/ # lsof | grep -w 7248 c21.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.c21.1-service roc_rk3588s_pc:/ # cat /proc/4146/cmdline app_process/data/local/tmp/.studiocom.android.tools.screensharing.Main–socketscreen-sharing-agent-8055–flags16 发现是android studio镜像导致的应该是因为一直黑屏导致反复申请内存导致DMA-BUF泄露。
关闭Android Studio的Device Mirroring功能后后面使用设备就正常了。 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