Android meminfo 查看方法及解析
目录
Android 上查看memory 信息的方法
内存限制的信息
手动释放缓存
例
adb shell dumpsys meminfo pid 解析
adb shell dumpsys meminfo 汇总信息说明
Total RAM
Free RAM
ION
Used RAM
Lost RAM
ZRAM
/proc/meminfo
参考文档
Android 上查看memory 信息的方法
- adb shell dumpsys meminfo : 查看系统整体和每个进程meminfo。
- adb shell dumpsys meminfo pid: 查看一个进程的memory占用情况。
- adb shell; cat /proc/zoneinfo:查看zoneinfo
- adb shell; cat proc/meminfo : 系统整体memory占用。
- adb shell procrank: 进程的内存情况, 需要root;
- showmap pid : 查看指定Pid的内存具体信息。

- free -m 查看free memory. free只包括没使用的, 不包括cached。
total used free shared buffers
Mem: 11960 11860 99 14 342
-/+ buffers/cache: 11517 442
Swap: 4095 0 4095
- adb shell top: 只能总的内存和free, 单个进程仅能查看Rss值, 不能看到pss, 一般pss更有意义。
内存限制的信息
查看内存限制。 OOM和cgroup
- 查看cgroup 内存 sys/fs/cgroup/memory/${cgroup}/memory.limit_in_bytes
- 查看oom 最小内存 ,该值触发内存回收/proc/sys/vm/min_free_kbytes :该值为全部zone的min free 总和。 但各zone 水线(min low high)查看cat /proc/zoneinfo
- low memory killer阀值(lmk ) 查看属性sys.lmk.minfree_levels。
手动释放缓存
操作文件:/proc/sys/vm/drop_caches
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.
例
adb shell "echo 3 > /proc/sys/vm/drop_caches"
通过 adb shell dumpsys meminfo |grep free 可以看到回收的效果。
adb shell dumpsys meminfo pid 解析
各值之间的关系见图,相同颜色的在等号两边是相当的。

adb shell dumpsys meminfo 汇总信息说明
输出信息处理代码在:dumpApplicationMemoryUsage()@ActivityManagerService.java
实际信息获取代码在: rsystem/memory/libmeminfo/sysmeminfo.cpp
分项说明:
Total RAM
系统总memory size。取自/proc/meminfo的MemTotal
Free RAM
可用内存。
其中 :
- cached pss : 为ams中所有cached app的size。cached app 为oomAdj大于 CACHED_APP_MIN_ADJ(900)的app, 这部分内存在内存紧张时可以被lmkd回收。
- cached kernel :为/proc/meminfo 中KReclaimable+ Buffers+ Cached -Mapped . 代码见: getCachedSizeKb@frameworks/base/core/java/com/android/internal/util/MemInfoReader.java
- free:对应/proc/meminfo中的MemFree。
ION
读取的是ion heap值,为文件:"/sys/kernel/ion/total_heaps_kb"中的值。
注: andnroid 11上使用ion机制, android 12上ion 已经被DMA-buf heaps 替代。
其中
- ION mapped: 读取的是文件/proc/pid/maps中所有以"/dmabuf"开头的行对应的数值总和, 不仅包含ion信息, 同样包含任何其他dma buffer 文件的map信息, 所以该值可能大于ion 的数值。
- unmapped: 为ion -ion mapped, 当ion mapped > ion时该值为负值。这是ion信息不严谨的地方。
ION 信息同样被统计到了meminfo 的其他项中, mapped+unmapped 统计在了Used RAM中。 pools统计到了 Free RAM中, 估计统计到了cached kernel中, 因为如果使用adb shell "echo 3 > /proc/sys/vm/drop_caches" , pools会清零, 同时 cached kernel 大幅减少, free增加。
Used RAM
为 所有可以统计到的已经使用的memory。
其中:
- used pss: 为所有process的pss内存总和- cached pss。
- kernel:为/proc/meminfo 中的 Shmem + SUnreclaim + VmallocUsed + PageTables + KernelStack + ION
Lost RAM
无法统计的使用的RAM信息。 系统中内存的使用并不是都被统计, 但是真实在使用, 这部分就为lost RAM, 以alloc_pages分配的内存就是这部分内存。 lost RAM为Total RAM - Free RAM - Used RAM - ZRAM + totalSwapPss(所有进程交换出得内存总和)。 每个进程totalSwapPss 计算参看 getTotalSwappedOutPss()@frameworks/base/core/java/android/os/Debug.java。
ZRAM
获取自: /sys/block/zram/mm_stat or /sys/block/zram/mem_used_total。第三项为zram使用。
swap: 使用的交换区的大小, 取自/proc/meminfo/SwapTotal - SwapFree。 total swap 为 /proc/meminfo/SwapTotal。
Total RAM: 11,650,184K (status normal)
Free RAM: 6,092,133K ( 422,981K cached pss + 136,832K cached kernel + 5,532,320K free)
ION: 749,412K ( 529,816K mapped + 14,220K unmapped + 205,376K pools)
Used RAM: 3,452,774K (1,937,002K used pss + 1,515,772K kernel)
Lost RAM: 2,105,265K
ZRAM: 12K physical used for 0K in swap (4,194,300K total swap)
Tuning: 256 (large 512), oom 322,560K, restore limit 107,520K (high-end-gfx)
/proc/meminfo
推荐博客: Linux:/proc/meminfo参数详细解释-CSDN博客,里面说明的很清楚。
总结如下: 系统内存的使用情况可以用以下公式表示:
| MemTotal = MemFree +【Slab+ VmallocUsed + PageTables + KernelStack + HardwareCorrupted + Bounce + X】+【Active + Inactive + Unevictable + (HugePages_Total * Hugepagesize)】 | |||||||
| MemTotal = MemFree +【Slab+ VmallocUsed + PageTables + KernelStack + HardwareCorrupted + Bounce + X】+【Cached + AnonPages + Buffers + (HugePages_Total * Hugepagesize)】 | |||||||
| MemTotal = MemFree +【Slab+ VmallocUsed + PageTables + KernelStack + HardwareCorrupted + Bounce + X】+【ΣPss + (Cached – mapped) + Buffers + (HugePages_Total * Hugepagesize)】 |
参考文档
memAailable : https://www.cnblogs.com/cxj2011/p/17455096.html
meminfo详解: Linux:/proc/meminfo参数详细解释-CSDN博客
linux alloc_pages() GFP标志位说明: Linux中的物理内存管理 [三] - 知乎
相关文章:
Android meminfo 查看方法及解析
目录 Android 上查看memory 信息的方法 内存限制的信息 手动释放缓存 例 adb shell dumpsys meminfo pid 解析 adb shell dumpsys meminfo 汇总信息说明 Total RAM Free RAM ION Used RAM Lost RAM ZRAM /proc/meminfo 参考文档 Android 上查看memory 信息的方法 …...
微信小程序解决华为手机保存图片到相册失败
1.新增隐私设置 2.优化代码 新增uni.authorize判断 _saveCode() {let that this;console.log(点击了保存图片)console.log(this.result)uni.authorize({scope: scope.writePhotosAlbum,success(e) {console.log(e)if (this.result ! "") {uni.saveImageToPhotosAlb…...
板块零 IDEA编译器基础:第三节 下载和在IDEA中集成 Tomcat服务器 来自【汤米尼克的JAVAEE全套教程专栏】
板块零 IDEA编译器基础:第三节 下载和在IDEA中集成 Tomcat服务器 一、为什么选择Tomcat(1)常见的JAVA WEB服务器(2)选择Tomcat的理由 二、Tomcat 8.5下载解压三、Tomcat 结构目录四、在IDEA中集成Tomcat 假设我们已经…...
2024/2/6
一、填空题 1、一个类的头文件如下所示,num初始化值为5,程序产生对象T,且修改num为10,并使用show()函数输出num的值10。 #include <iostream.h> class Test { private: static int num; public: Test(int); void sho…...
mysql清空表数据后如何让自增ID仍从1开始
有2种方法: 1、清空表时使用truncate命令,而不用delete命令 truncate test; 使用truncate命令的好处: 1)、速度快 2)、可以对自增ID进行重排,使自增ID仍从1开始计算 2、清空表数据后,使用alter…...
C++集群聊天服务器 数据模块+业务模块+CMake构建项目 笔记 (上)
跟着施磊老师做C项目,施磊老师_腾讯课堂 (qq.com) 本文在此篇博客的基础上继续实现数据模块和业务模块代码: C集群聊天服务器 网络模块业务模块CMake构建项目 笔记 (上)-CSDN博客https://blog.csdn.net/weixin_41987016/article…...
#Js篇:字符串的使用方法es5和es6
字符串 \ :单引号(\u0027)\" :双引号(\u0022) charAt 定义: 返回指定位置的字符,参数时从0开始编号的位置 参数: 位置下标 abc.charAt(1) // "b" …...
SpringBoo+Vue构建简洁日志文件查看系统
点击下载《SpringBooVue构建日志文件查看系统(源代码)》 1. 前言 想必经常做java开发的小伙伴,其大多数服务都是运行在linux系统上的,当遇到一些比较棘手的bug需要处理时,经常要上服务器去捞日志,然后通过…...
JavaScript基础第二天
JavaScript基础第二天 今天我们学习if分支语句、三元表达式和switch-case语句。 1. if分支语句 1.1 语法 if (条件表达式){// 满足条件要执行的语句 } else {// 不满足条件要执行的语句 }if中的内容如果为true,就执行大括号的代码块,如果为false执行…...
2、卷积和ReLU激活函数
python了解集合网络如何创建具有卷积层的特性。 文章目录 简介特征提取(Feature Extraction)卷积过滤(Filter with Convolution)Weights(权重)激活(Activations)用ReLU检测示例 - 应用卷积和ReLU结论In [1]: import numpy as np from itertools import productdef show_kerne…...
SQL世界之基础命令语句
目录 一、SQL SELECT 语句 1.SQL SELECT 语法 2.SQL SELECT 实例 3.SQL SELECT * 实例 二、SQL SELECT DISTINCT 语句 1.语法 2.使用 DISTINCT 关键词 三、SQL SELECT WHERE 语句 1.WHERE 子句 2.语法 3.使用 WHERE 子句 4.引号的使用 四、SQL SELECT AND&OR …...
Facebook未来展望:社交媒体的下一个篇章
社交媒体一直是连接人与人之间的纽带,而Facebook则一直在推动这一领域的发展。随着科技不断演进和社会需求的不断变迁,Facebook正积极筹谋社交媒体的下一个篇章。本文将深入剖析Facebook的未来展望,探讨其在社交媒体领域所迎接的新时代。 1. …...
源码搭建教学:直播带货商城小程序开发
结合小程序开发的直播带货商城,不仅可以提供更便捷的购物体验,还可以实现更高效的销售。因此,学习如何搭建一个直播带货商城小程序将成为您拓展商业领域的利器。 步骤一:准备工作 在开始开发之前,您需要进行一些准备工…...
vue-cli引入本地json数据:封装为js文件,无需请求直接读取
vue-cli引入本地json数据 1、新建js文件(路径自定义),写入JSON数据 /* jsonData.js */export let jsonData { // 声明变量,存储数据// JSON源数据 }2、组件内引入js文件,读取数据 /* Example.vue */import { json…...
20240202在Ubuntu20.04.6下使用whisper.cpp的显卡模式
20240202在Ubuntu20.04.6下使用whisper.cpp的显卡模式 2024/2/2 19:43 【结论:在Ubuntu20.04.6下,确认large模式识别7分钟中文视频,需要356447.78 ms,也就是356.5秒,需要大概5分钟!效率太差!】 …...
前端面试拼图-数据结构与算法
摘要:总结一些前端算法题,持续更新! 一、数据结构与算法 时间复杂度-程序执行时需要的计算量(CPU) 空间复杂度-程序执行时需要的内存空间 前端开发:重时间,轻空间 1.把一个数组旋转k步 arr…...
在C++的union中使用std::string(非POD对象)的陷阱
struct和union的对比 union最开始是C语言中的关键字,在嵌入式中比较常见,由于嵌入式内存比较稀缺,所以常用union用来节约空间,在其他需要节省内存的地方也可以用到这个关键字,写一个简单程序来说明union的用途 struc…...
Spring Cloud Netflix Eureka的参数调优
下面主要分为Client端和Server端两大类进行简述,Eureka的几个核心参数 客户端参数 Client端的核心参数 参数默认值说明eureka.client.availability-zones告知Client有哪些region以及availability-zones,支持配置修改运行时生效eureka.client.filter-o…...
Wireshark不显示Thrift协议
使用Wireshark对thrift协议进行抓包,但是只显示了传输层的tcp协议: "右键" -> "Decode As" 选择thrift的tcp端口 将“当前”修改为Thrift,然后点击“确定” 设置后,可以发现Wireshark里面显示的协议从Tcp变…...
VMware虚拟机安装openEuler系统(一)(2024)
目录 一、下载ISO镜像 二、开始创建虚拟机 通过实践是学习openEuler开源Linux系统的最佳方式。因此我们首先得搭建一个openEuler实战环境,文章是在Windows系统上使用VMware Workstation虚拟化软件,安装和学习openEuler开源Linux操作系统。 使用虚拟机…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

