1.cat /proc/meminfo

   MemTotal: 所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小)MemFree: LowFree与HighFree的总和Buffers: 用来给块设备做的缓冲大小(只记录文件系统的metadata以及 tracking in-flight pages,就是说 buffers是用来存储,目录里面有什么内容,权限等等。)Cached: 用来给文件做缓冲大小(直接用来记忆我们打开的文件). 它不包括SwapCachedSwapCached: 已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。Active: 最近经常被使用的内存,除非非常必要否则不会被移作他用.Inactive: 最近不经常被使用的内存,非常用可能被用于其他途径.HighTotal:HighFree: 高位内存是指所有在860MB以上的内存空间,该区域主要用于用户空间的程序或者是缓存页面。内核必须使用不同的手法使用该段内存,因此它比低位内存要慢一些。LowTotal:LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。Among many other things, it is where everything from the Slab isallocated.  Bad things happen when you're out of lowmem.SwapTotal: 交换空间的总和SwapFree: 从RAM中被替换出暂时存在磁盘上的空间大小Dirty: 等待被写回到磁盘的内存大小。Writeback: 正在被写回到磁盘的内存大小。Mapped: 影射文件的大小。Slab: 内核数据结构缓存VmallocTotal: vmalloc内存大小VmallocUsed: 已经被使用的虚拟内存大小。VmallocChunk: largest contigious block of vmalloc area which is freeCommitLimit:Committed_AS:

2、dumpsys meminfo

更多关于dumpsys的使用信息,可以查看:

https://blog.csdn.net/shift_wwx/article/details/42464293

可以dump的这些service都是在ServiceManager里面添加上的,例如meminfo是在:frameworks/base/services/java/com/android/server/am/ActivityManagerService.java的函数setSystemProcess添加的:

public static void setSystemProcess() {try {ActivityManagerService m = mSelf;ServiceManager.addService(Context.ACTIVITY_SERVICE, m, true);ServiceManager.addService(ProcessStats.SERVICE_NAME, m.mProcessStats);ServiceManager.addService("meminfo", new MemBinder(m));ServiceManager.addService("gfxinfo", new GraphicsBinder(m));ServiceManager.addService("dbinfo", new DbBinder(m));if (MONITOR_CPU_USAGE) {ServiceManager.addService("cpuinfo", new CpuBinder(m));}ServiceManager.addService("permission", new PermissionController(m));ApplicationInfo info =mSelf.mContext.getPackageManager().getApplicationInfo("android", STOCK_PM_FLAGS);mSystemThread.installSystemApplicationInfo(info);synchronized (mSelf) {ProcessRecord app = mSelf.newProcessRecordLocked(info,info.processName, false);app.persistent = true;app.pid = MY_PID;app.maxAdj = ProcessList.SYSTEM_ADJ;app.makeActive(mSystemThread.getApplicationThread(), mSelf.mProcessStats);mSelf.mProcessNames.put(app.processName, app.uid, app);synchronized (mSelf.mPidsSelfLocked) {mSelf.mPidsSelfLocked.put(app.pid, app);}mSelf.updateLruProcessLocked(app, false, null);mSelf.updateOomAdjLocked();}} catch (PackageManager.NameNotFoundException e) {throw new RuntimeException("Unable to find android system package", e);}}

来看一下MemBinder:

@Overrideprotected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {if (mActivityManagerService.checkCallingPermission(android.Manifest.permission.DUMP)!= PackageManager.PERMISSION_GRANTED) {pw.println("Permission Denial: can't dump meminfo from from pid="+ Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()+ " without permission " + android.Manifest.permission.DUMP);return;}mActivityManagerService.dumpApplicationMemoryUsage(fd, pw, "  ", args, false, null);
}

最终调用的是:

mActivityManagerService.dumpApplicationMemoryUsage

具体的source code这里暂不作分析了。

通过code可以看出meminfo的几个参数如下:

t7-p1:/ # dumpsys meminfo -h
meminfo dump options: [-a] [-d] [-c] [-s] [--oom] [process]-a: include all available information for each process.-d: include dalvik details.-c: dump in a compact machine-parseable representation.-s: dump only summary of application memory usage.-S: dump also SwapPss.--oom: only show processes organized by oom adj.--local: only collect details locally, don't call process.--package: interpret process arg as package, dumping allprocesses that have loaded that package.--checkin: dump data for a checkin
If [process] is specified it can be the name or
pid of a specific process to dump.

adb shell dumpsys meminfo <package_name>
其中,package_name 也可以换成程序的pid,pid可以通过 adb shell top | grep app_name 来查找,下图是某个程序的内存使用情况:

130|t7-p1:/ # dumpsys meminfo com.neo.dsm
Applications Memory Usage (in Kilobytes):
Uptime: 3964700 Realtime: 3964700** MEMINFO in pid 4230 [com.neo.dsm] **Pss  Private  Private     Swap     Heap     Heap     HeapTotal    Dirty    Clean    Dirty     Size    Alloc     Free------   ------   ------   ------   ------   ------   ------Native Heap    58751    58644        0        0   160640   137494    23145Dalvik Heap     7461     7424        0        0    15397     9239     6158Dalvik Other     2220     2220        0        0                           Stack     1668     1668        0        0                           Ashmem     3470     3452        0        0                           Other dev        4        0        4        0                           .so mmap     2215      340      552        0                           .apk mmap     8224      404     7312        0                           .ttf mmap       11        0        0        0                           .dex mmap     4652        4     4648        0                           .oat mmap     2435        0      488        0                           .art mmap     1673     1348        0        0                           Other mmap      497        4      184        0                           Unknown     1618     1616        0        0                           TOTAL    94899    77124    13188        0   176037   146733    29303App SummaryPss(KB)------Java Heap:     8772Native Heap:    58644Code:    13748Stack:     1668Graphics:        0Private Other:     7480System:     4587TOTAL:    94899      TOTAL SWAP (KB):        0ObjectsViews:        9         ViewRootImpl:        0AppContexts:        3           Activities:        1Assets:        2        AssetManagers:        2Local Binders:       14        Proxy Binders:       20Parcel memory:       30         Parcel count:      120Death Recipients:        0      OpenSSL Sockets:        1WebViews:        0SQLMEMORY_USED:        0PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:       62
130|t7-p1:/ # top | grep com.neo.dsm4230 system   20   0   9% S   237 1551484K 139732K  fg com.neo.dsm4230 system   20   0   9% S   237 1551484K 139776K  fg com.neo.dsm

adb shell dumpsys meminfo PID

130|t7-p1:/ # dumpsys meminfo 4230
Applications Memory Usage (in Kilobytes):
Uptime: 4204302 Realtime: 4204302** MEMINFO in pid 4230 [com.neo.dsm] **Pss  Private  Private     Swap     Heap     Heap     HeapTotal    Dirty    Clean    Dirty     Size    Alloc     Free------   ------   ------   ------   ------   ------   ------Native Heap    58795    58688        0        0   160128   137568    22559Dalvik Heap     9945     9908        0        0    15424     9255     6169Dalvik Other     2296     2296        0        0                           Stack     1644     1644        0        0                           Ashmem     3470     3452        0        0                           Other dev        4        0        4        0                           .so mmap     2217      340      552        0                           .apk mmap     8224      404     7312        0                           .ttf mmap       11        0        0        0                           .dex mmap     4652        4     4648        0                           .oat mmap     2494        0      520        0                           .art mmap     1935     1376      224        0                           Other mmap      497        4      184        0                           Unknown     1618     1616        0        0                           TOTAL    97802    79732    13444        0   175552   146823    28728App SummaryPss(KB)------Java Heap:    11508Native Heap:    58688Code:    13780Stack:     1644Graphics:        0Private Other:     7556System:     4626TOTAL:    97802      TOTAL SWAP (KB):        0ObjectsViews:        9         ViewRootImpl:        0AppContexts:        3           Activities:        1Assets:        2        AssetManagers:        2Local Binders:       14        Proxy Binders:       20Parcel memory:       30         Parcel count:      120Death Recipients:        0      OpenSSL Sockets:        3WebViews:        0SQLMEMORY_USED:        0PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:       62

重点关注如下几个字段:
(1) Native/Dalvik 的 Heap 信息
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。

(2) Total 的 PSS 信息
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。

其它部分的说明:

其他类型              smap 路径名称                       描述Ashmem              /dev/ashmem            匿名共享内存用来提供共享内存通过分配一个多个进程可以共享的带名称的内存块
Other dev            /dev/                         内部driver占用的在 “Other dev”
.so mmap             .so                           C 库代码占用的内存
.jar mmap            .jar                          Java 文件代码占用的内存
.apk mmap            .apk                          apk代码占用的内存
.ttf mmap            .ttf                          ttf 文件代码占用的内存
.dex mmap            .dex                          Dex 文件代码占用的内存
Other mmap                                         其他文件占用的内存
————————————————

Lost RAM = Total RAM - Free RAM - Used RAM

使用adb shell procrank
手机中的sh是经过精简过的,有些手机可能没有 procrank 命令,可以使用genymotion模拟器,或是自己安装procrank命令。使用procrank时,命令行的输出入下图:

t7-p1:/ # procrank                                                             PID       Vss      Rss      Pss      Uss  cmdline4230  1573056K  140188K   93428K   88680K  com.neo.dsm2390  1593916K  101028K   58147K   51300K  system_server4616  1095468K   96800K   50089K   44624K  com.neo.xunfei4572  1046628K   74408K   33713K   30472K  com.neo.mqtt3444  1019260K   68924K   30019K   26620K  com.android.systemui3469  1018664K   65128K   25558K   22804K  com.neo.launcher4673  1053624K   57588K   24411K   22832K  com.neo.chat4353  1065292K   59252K   23753K   21724K  com.neo.n14689  1053712K   54524K   22698K   21292K  com.neo.camap1716   263808K   33128K   21695K   20368K  /system/bin/cameraserver1711  1559472K   69612K   16489K    8832K  zygote3769  1010088K   52932K   16268K   13640K  com.android.phone5079  1015688K   53028K   16008K   12960K  com.android.settings3536  1006580K   52160K   14706K   12224K  com.google.android.inputmethod.pinyin5460  1004180K   50680K   13428K   11112K  com.softwinner.dvr1729   163844K   23736K   11420K    9308K  /system/bin/mediaserver5580   986864K   46500K   11029K    8888K  android.process.acore6713   990088K   46732K   10784K    8896K  com.neo.radio1708    24748K   10708K    9737K    9688K  /system/bin/logcat4879   984788K   43264K    8754K    7076K  com.neo.update4172   984236K   43232K    8237K    6232K  android.process.media4978   990080K   37016K    7410K    6232K  com.android.dialer1714    95524K   17952K    7385K    6160K  /system/bin/audioserver1724    79424K   17260K    6780K    5676K  media.codec5538   985716K   39532K    6676K    4320K  com.neo.xunfei:remote4533   981756K   38960K    6495K    5096K  com.neo.ble1725    69912K   17792K    6354K    4664K  /system/bin/mediadrmserver1728    89616K   17304K    6271K    5140K  media.extractor5294   984784K   35412K    6230K    4988K  cn.kuwo.kwmusiccar1719    64336K   16504K    5823K    4764K  /system/bin/drmserver4654   980312K   35484K    5800K    4628K  com.neo.blemusic3517   978072K   36312K    5557K    4276K  com.android.printspooler4837   976568K   35636K    5411K    2596K  android.ext.services5412   980168K   33832K    5403K    4312K  com.neo.music4193   977756K   34312K    4894K    3704K  com.android.keychain3900   978116K   33576K    4801K    3684K  com.android.smspush1685    59580K   14820K    4798K    3896K  /system/bin/displayservice2421    78744K    5572K    3280K    1408K  /system/bin/gocsdk1703    64068K   14908K    3090K     328K  /system/bin/gocsdk1595    15792K    3820K    2820K    2772K  /system/bin/logd1690    40504K    5388K    2666K    2328K  /system/bin/surfaceflinger1709     9124K    3356K    2409K    2360K  /system/bin/logcat
11643     6484K    3144K    2350K    2332K  procrank1600    11776K    3328K    1474K    1300K  /system/bin/vold1733    35764K    3012K    1428K    1340K  /system/bin/netd3961     8240K    2260K    1339K    1304K  /system/bin/sdcard4211     8240K    2176K    1255K    1220K  /system/bin/sdcard1760    13716K    4464K    1224K    1008K  /system/bin/neomcu1722     8052K    2780K    1052K     956K  /system/bin/keystore1705    14024K    2300K     995K     952K  /system/bin/rild1     8372K    1068K     801K     600K  /init1702    12820K     708K     679K     676K  /sbin/adbd1686     4568K    1624K     655K     628K  /system/bin/lmkd1057     2820K     848K     614K     388K  /sbin/ueventd4332     4844K    1580K     584K     556K  pppd1682     3548K    1308K     545K     528K  /system/bin/sh1720     5004K    1632K     539K     504K  /system/bin/installd
11619     4736K    1464K     480K     452K  sleep1688     4596K    1488K     467K     432K  /system/bin/servicemanager1743     4104K    1416K     452K     424K  /system/xbin/perfprofd1681     2996K     416K     408K     408K  /sbin/healthd1761     1456K     336K     336K     336K  /sbin/busybox1599     5348K    1580K     291K      72K  /system/bin/debuggerd1613     5092K     532K     245K      56K  debuggerd:signaller------   ------  ------648966K  559376K  TOTALRAM: 1793368K total, 558392K free, 3192K buffers, 671620K cached, 8536K shmem, 65080K slab

可以看到,在linux下表示内存的耗用情况有四种不同的表现形式:
 VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
 RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
 PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
 USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

VSS:VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已经申请但尚未使用的内存空间。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。
RSS:表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。
PSS:表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。这种方式表示进程的内存使用情况较准确,但当只有一个进程使用共享库时,其情况和RSS一模一样。
USS:表示一个进程本身占用的内存空间大小,不包含其它任何成分,这是表示进程内存大小的最好方式!
可以看到:VSS>=RSS>=PSS>=USS

查看进程占用cpu的情况:adb shell top -n 1 -d 0.5 | grep proc_ id

127|t7-p1:/ #  top -n 1 -d 0.5 | grep 42304230 system   20   0   6% S   262 1576156K 136492K  fg com.neo.dsm
t7-p1:/ # 

adb shell top -m 数字 : 查看应用内存占用率,其中数字为返回的应用数量,从高到低排序 如:
adb shell top -m 10  查看10个进程的内存情况

系统强制释放内存:

页内存释放:
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

如android在ActuvutyManageServer中解析meminfo信息,当caches值大于某个值,或者剩余内存小于内存总数的20%时,发起强制释放缓存,如下:

flushcache.sh文件内容:
#!/system/bin/busybox sh
/system/bin/log -t pagecache "flush page cache"
echo 1 > /proc/sys/vm/drop_caches

android查看内存使用情况相关推荐

  1. android 如何 查看内存使用详情,android 查看内存使用情况

    对android 内存分析比较好的Blog: 主要介绍 1.进程的地址空间. 2.进程内存空间和RAM之间的关系. 3.Android中的进程. 4.Android中进程的堆内存. 5.Android ...

  2. [轉]MS SQL Server启用AWE用查看内存使用情况

    轉自 : http://www.path8.net/tn/archives/4508 MS SQL Server启用AWE用查看内存使用情况,使用SQL命令 DBCC MemoryStatus 3G以 ...

  3. 进阶指令——df指令(作用:查看磁盘的空间)、free指令(作用:查看内存使用情况)、head指令(作用:查看一个文件的前n行,如果不指定n,则默认显示前10行)、tail指令、less指令

    1.df指令 作用:查看磁盘的空间 语法:#df -h -h表示以可读性较高的形式展示大小 2.free指令 作用:查看内存使用情况 语法:#free -m   -m表示以mb为单位查看 剩余的真实可 ...

  4. 【linux】查看内存使用情况

    内存使用量排序显示 top命令查看 top命令能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.使用top命令可以轻松查看各个应用的内存使用情况. # top -d 1 在t ...

  5. 如何查看服务器资源占用情况,云服务器如何查看内存占用情况

    云服务器如何查看内存占用情况 发布时间:2020-05-26 15:28:18 来源:亿速云 阅读:508 作者:栢白 云服务器如何查看内存占用情况?云 我们以 Linux 云服务器为例,介绍几个常用 ...

  6. Linux下查看内存使用情况方法总结

    关注.星标公众号,直达精彩内容 来自:Specs'Blog 链接:http://9iphp.com/linux/1247.html 原文:http://ask.xmodulo.com/check-me ...

  7. android手机内存使用情况分析

    android手机内存使用情况分析         通常客户经常纠结手机内存的使用率不合理,占有的内存太大,可用内存很少,客户往往需要给出解决方案或在给出原因,那么你首先需要知道手机的内存都被什么应用 ...

  8. linux系统命令-查看内存使用情况

    1.查看系统内存占用 free -m [root@localhost ~]# free -mtotal used free shared buffers cached Mem: 2004 573 14 ...

  9. Linux_查看内存使用情况

    1./proc/meminfo 查看RAM使用情况最简单的方法是通过/proc/meminfo.这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示./ ...

最新文章

  1. Linux用户环境变量
  2. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档(转
  3. 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )
  4. 【知识发现】隐语义模型LFM算法python实现(二)
  5. 响应式微服务 in java 译 十五 Microservices in OpenShift
  6. android主题编辑器,使用 Theme Editor 设计应用主题背景
  7. 洛谷4400 BlueMary的旅行(分层图+最大流)
  8. 漫步数理统计七——随机变量(上)
  9. Linux守护进程的启动方法
  10. 【mongoDB实战】mongo集群---主从复制篇
  11. 微信小程序使用iconfont在线icon
  12. Android 自定义字体(otf,ttf等等)
  13. java房屋出租系统
  14. openstackdvr模式
  15. KETTLE相关问题处理
  16. Oracle中insert into select和select into的用法(异常0RA-00905:missing keyword的解决)
  17. 以某SCI期刊为例说明该期刊投稿须知和流程
  18. html正则表达式判断手机号,js正则表达式根据手机号判断校验运营商
  19. layui table 获取单元格总是多一个
  20. VRChat火了,但VR社交还没迎来最好的时代

热门文章

  1. 统计力学练习: Ising模型的平均场解以及严格求解
  2. 关于如何在sublime text3中添加字体问题解决,保姆级教程
  3. 远控免杀专题(13)-zirikatu免杀(VT免杀率39/71)
  4. 2023注会电子版教材
  5. java导出excel限制大小_解决java poi导出excel2003不能超过65536行的问题
  6. linux修改宽带拨号密码,linux 下 adsl 拨号设置
  7. 第二届2011年国信蓝点杯软件设计大赛预赛的试题7
  8. Kali Linux信息收集之nbtscan-unixwiz
  9. Swagger注释@API详细说明
  10. 飞信迷你首页疑似被黑?