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中的物理内存管理 [三] - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/254341.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习之Linux入门篇笔记——9,Linux权限管理

配套视频学习链接:http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 1.为什么要管理 Linux 权限? 很好管理每个用户。控制每…

【数据分享】1929-2023年全球站点的逐年平均风速(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

初始web服务器(并基于idea来实现无需下载的tomcat)

前言 前面学习了对应的http协议,我们知道了他是在网络层进行数据传输的协议,负责相应数据以及接收数据的规则,但是在人员开发后端的时候不仅仅需要你写io流进行数据传输,还需要你进行对应的tcp协议来进行数据打包发送http协议-CSD…

[office] Excel自带的编辑函数求和方法 #其他#媒体

Excel自带的编辑函数求和方法 今天小编为大家分享Excel自带的编辑函数求和方法,方法很简单的,对于不是很熟悉excel表格的朋友可以参考一下,希望能对大家有所帮助 很多同学以及上班族需要大量使用Excel这款表格编辑器,当表格中有大…

InternLM大模型实战-2.浦语大模型趣味demo

文章目录 前言笔记正文3个Demo的简要介绍InternLM模型简介Lagent介绍书生灵笔多模态大模型 Demo动手实践模型的下载更多 前言 本文是对于InternLM全链路开源体系系列课程的学习笔记。视频教程:【轻松玩转书生浦语大模型趣味Demo】 https://www.bilibili.com/video/…

金融信贷风控评分卡模型

评分卡模型概念 评分模型是根据借款人的历史数据,选取不同维度的数据类型,通过计算而得出的对借款人信用情况打分的模型。不同等级的信用分数代表了借款人信用情况的好坏,以此来分析借款人按时还款的可能性。 评分卡模型分类 A卡&#xff…

ClickHouse的优缺点和应用场景

当业务场景需要一个大批量、快速的、可支持聚合运算的数据库,那么可选择ClickHouse。 选择ClickHouse 的原因: 记录类型类似于LOG,读取、运算远远大于写入操作选取有限列,对近千万条数据,快算的运算出结果。数据批量…

【开源】SpringBoot框架开发医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

ArcGIS的UTM与高斯-克吕格投影分带要点总结

UTM(通用横轴墨卡托投影、等角横轴割椭圆柱投影)投影分带投影要点: 1)UTM投影采用6度分带 2)可根据公式计算,带数(经度整数位/6)的整数部分31 3)北半球地区&#xff0…

springboot微信小程序 uniapp学习资料分享系统v9uy4

理论意义 当今网络教学已成为各国教育改革 和发展的趋势。因此,构建一个适合交互式课堂教学模式的教学平台就成了当务之 急。 在国内高校,目前交互平台主要用于网络学院的远程教学,至于校园内的正规教学,老师自发建立课程主页的比…

【服务器数据恢复】HP EVA虚拟化磁盘阵列数据恢复原理方案

EVA存储结构&原理: EVA是虚拟化存储,在工作过程中,EVA存储中的数据会不断地迁移,再加上运行在EVA上的应用都比较繁重,磁盘负载高,很容易出现故障。EVA是通过大量磁盘的冗余空间和故障后rss冗余磁盘动态…

自学Python第二十二天- Django框架(六) django的实用插件:cron、APScheduler

django-crontab 和 django-cron 有时候需要django在后台不断的执行一个任务,简单的可以通过中间件来实现,但是中间件是根据请求触发的。如果需要定时执行任务,则需要使用到一些插件。 django-crontab 和 django-cron 是常用的用于处理定时任…

【HarmonyOS应用开发】APP应用的通知(十五)

相关介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景: 显示接收…

HiveSQL——用户中两人一定认识的组合数

注:参考文章: SQL之用户中两人一定认识的组合数--HQL面试题36【快手数仓面试题】_sql面试题-快手-CSDN博客文章浏览阅读1.2k次,点赞3次,收藏12次。目录0 需求分析1 数据准备2 数据分析3 小结0 需求分析设表名:table0现…

JRebel激活-nginx版本

nginx转发流量(代替其他网上说的那个工具) proxy_pass http://idea.lanyus.com; 工具激活 填写内容说明: 第一行的激活网址是:http://127.0.0.1:8888/ 正确的GUID。GUID 可以通过专门的网站来生成(点击打开&#…

Vue3快速上手(一)使用vite创建项目

一、准备 在此之前,你的电脑,需要安装node.js,我这边v18.19.0 wangdymb 2024code % node -v v18.19.0二、创建 执行npm create vuelatest命令即可使用vite创建vue3项目 有的同学可能卡主不动,可能是npm的registry设置的问题 先看下&#x…

Qt PCL学习(二):点云读取与保存

注意事项 版本一览:Qt 5.15.2 PCL 1.12.1 VTK 9.1.0前置内容:Qt PCL学习(一):环境搭建 0. 效果演示 1. pcl_open_save.pro QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgets// 添加下行代码&#…

npm 下载报错

报错信息 : 证书过期 (CERT_HAS_EXPIRED) D:\Apps\nodejs-v18.16.1\npx.cmd --yes create-next-app"latest" . --ts npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/create-next-app failed…

7机器人位姿的数学描述与坐标变

由上次刚体的空间转动直接切换为机器人相关术语。 1.机器人位姿的数学描述与坐标变换 1.1位姿描述 {B}相对于{A}的姿态描述用3x3矩阵表示为: 式中为三个单位正交主矢量,分别表示刚体坐标系{B}的三个坐标轴XBYBZB在参考系{A}中的方位,∠XBXA表…

Git 消除对某个文件的追踪

参考: (尚未验证他的该方法) https://www.golinuxcloud.com/git-remove-file-from-tracking/https://www.golinuxcloud.com/git-remove-file-from-tracking/