Android使用procrank和dumpsys meminfo分析内存占用情况

如果你想查看所有进程的内存使用情况,可以使用命令procrank、dumpsys meminfo查看,当然也只可以过滤出某个进程如:dumpsys meminfo | grep -i phone

先来看下procrank

 1 sh-4.2# procrank
 2   PID      Vss      Rss      Pss      Uss  cmdline
 3  1078   59840K   59708K   42125K   39344K  com.csr.BTApp
 4  2683   59124K   59040K   37960K   33032K  com.android.launcher
 5  1042   51572K   51488K   35686K   33604K  android.process.acore
 6   782   32808K   32748K   16775K   14716K  system_server
 7   667   20560K   17560K   12739K    8940K  /system/bin/surfaceflinger
 8   851   30124K   30036K   12085K    7996K  com.android.systemui
 9  2999   27680K   27596K    9929K    7040K  com.baidu.input
10   959   20764K   20676K    5522K    3788K  com.android.phone
11  3468   21892K   21800K    4591K    1920K  com.apical.dreamthemetime
12   982   19880K   19792K    4438K    2644K  com.csr.csrservices
13   668   19592K   19480K    3525K    1360K  zygote
14   670    2960K    2960K    2407K    2356K  /system/bin/mediaserver
15   663    1784K    1784K    1209K    1116K  /system/bin/synergy_service
16   756    3404K    1348K    1133K    1124K  /usr/bin/gpsexe
17   669    1468K    1468K     959K     928K  /system/bin/drmserver
18   675     692K     692K     692K     692K  /bin/sh
19   758    1060K    1060K     630K     604K  /system/bin/audiotransfer
20  3482     656K     652K     456K     444K  procrank
21   664     664K     664K     403K     392K  /system/bin/netd
22   658     584K     584K     331K     320K  /system/bin/vold
23   666     548K     548K     270K     256K  /system/bin/rild
24   671     416K     412K     212K     204K  /system/bin/dbus-daemon
25   673     336K     332K     170K     164K  /system/bin/keystore
26     1     164K     164K     144K     144K  /init
27   674     152K     152K     136K     136K  /sbin/adbd
28   662     312K     312K     112K     104K  /system/bin/dvdd
29   672     328K     324K     109K     100K  /system/bin/installd
30   657     268K     264K     102K      96K  /system/bin/servicemanager
31   649      84K      84K      84K      84K  /sbin/ueventd
32   665     260K     256K      83K      76K  /system/bin/debuggerd
33                           ------   ------  ------
34                          195031K  163724K  TOTAL
35
36 RAM: 480380K total, 3624K free, 732K buffers, 299788K cached, 264844K shmem, 7632K slab

从以上打印可以看出,一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)是单个进程全部可访问的地址空间
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)是单个进程实际占用的内存大小,对于单个共享库, 尽管无论多少个进程使用,实际该共享库只会被装入内存一次。
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。如果进程被终止, USS 就是实际被返还给系统的内存大小。
USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。怀疑某个程序有内存泄露可以查看这个值是否一直有增加

使用dumpsys meminfo查看内存信息

 1 sh-4.2# dumpsys meminfo
 2 Applications Memory Usage (kB):
 3 Uptime: 3353863 Realtime: 3353850
 4
 5 Total PSS by process:
 6     41743 kB: com.csr.BTApp (pid 1078)
 7     36924 kB: com.android.launcher (pid 2683)
 8     35452 kB: android.process.acore (pid 1042)
 9     16094 kB: system (pid 782)
10     11609 kB: com.android.systemui (pid 851)
11      8564 kB: com.baidu.input (pid 2999)
12      5298 kB: com.android.phone (pid 959)
13      4443 kB: com.apical.dreamthemetime (pid 4448)
14      4203 kB: com.csr.csrservices (pid 982)
15      4130 kB: com.apical.apicalradio (pid 4518)
16
17 Total PSS by OOM adjustment:
18     16094 kB: System
19                16094 kB: system (pid 782)
20     21110 kB: Persistent
21                11609 kB: com.android.systemui (pid 851)
22                 5298 kB: com.android.phone (pid 959)
23                 4203 kB: com.csr.csrservices (pid 982)
24     36924 kB: Foreground
25                36924 kB: com.android.launcher (pid 2683)
26     85759 kB: Perceptible
27                41743 kB: com.csr.BTApp (pid 1078)
28                35452 kB: android.process.acore (pid 1042)
29                 8564 kB: com.baidu.input (pid 2999)
30      4443 kB: A Services
31                 4443 kB: com.apical.dreamthemetime (pid 4448)
32      4130 kB: Background
33                 4130 kB: com.apical.apicalradio (pid 4518)
34
35 Total PSS by category:
36     56020 kB: Dalvik
37     30214 kB: Other dev
38     27716 kB: Native
39     24504 kB: Cursor
40     13198 kB: Unknown
41      7723 kB: Other mmap
42      6895 kB: .so mmap
43      1232 kB: .apk mmap
44       888 kB: .dex mmap
45        36 kB: .ttf mmap
46        34 kB: Ashmem
47         0 kB: .jar mmap
48
49 Total PSS: 168460 kB  

打印某个程序内存信息,把包名写上,如:com.android.launcher

 1 sh-4.2# dumpsys meminfo com.android.launcher
 2 Applications Memory Usage (kB):
 3 Uptime: 4497753 Realtime: 4497741
 4
 5 ** MEMINFO in pid 2683 [com.android.launcher] **
 6                          Shared  Private     Heap     Heap     Heap
 7                    Pss    Dirty    Dirty     Size    Alloc     Free
 8                 ------   ------   ------   ------   ------   ------
 9        Native     2144      988     2040     8636     5124     1699
10        Dalvik     9481     8292     8644    13639    13335      304
11        Cursor        0        0        0
12        Ashmem        2        4        0
13     Other dev        4       20        0
14      .so mmap      922     1892      292
15     .jar mmap        0        0        0
16     .apk mmap       90        0        0
17     .ttf mmap        0        0        0
18     .dex mmap      300        0        0
19    Other mmap     1634       16      112
20       Unknown     1830      580     1772
21         TOTAL    16407    11792    12860    22275    18459     2003
22
23  Objects
24                Views:      146         ViewRootImpl:        1
25          AppContexts:      374           Activities:        1
26               Assets:        4        AssetManagers:        4
27        Local Binders:       13        Proxy Binders:       23
28     Death Recipients:        1
29      OpenSSL Sockets:        0
30
31  SQL
32                 heap:       59          MEMORY_USED:       59
33   PAGECACHE_OVERFLOW:        1          MALLOC_SIZE:       46
34
35  DATABASES
36       pgsz     dbsz   Lookaside(b)          cache  Dbname
37          1      179             55         2/11/2  launcher.db
38
39  Asset Allocations
40     zip:/system/app/Launcher2.apk:/resources.arsc: 340K
41     zip:/system/app/MediaCenter.apk:/resources.arsc: 604K  

Android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。Android程序内存一般限制在16M,当然也有24M的。
从上信息对于分析内存泄露,内存溢出都有极大的作用,从以上信息可以看到该应用程序占用的native和dalvik,当TOTAL 16407 11792 12860 22275 18459 2003超过内存最大限制时会出现OOM错误。
dumpsys能做的事还有很多

1 dumpsys [options]
2                meminfo 显示内存信息
3                cpuinfo 显示CPU信息
4                account 显示accounts信息
5                activity 显示所有的activities的信息
6                window 显示键盘,窗口和它们的关系
7                wifi 显示wifi信息  

参考文档:http://www.cnblogs.com/qianxudetianxia/archive/2012/05/14/2497073.html

转自:http://blog.csdn.net/deng0zhaotai/article/details/34848929

时间: 2024-08-06 03:42:07

Android使用procrank和dumpsys meminfo分析内存占用情况的相关文章

Android使用procrank和dumpsysmeminfo分析内存占用情况

如果你想查看所有进程的内存使用情况,可以使用命令procrank.dumpsys meminfo查看,当然也只可以过滤出某个进程如:dumpsys meminfo | grep -i phone 先来看下procrank view sourceprint? 01. sh-4.2# procrank 02. PID Vss Rss Pss Uss cmdline 03. 1078 59840K 59708K 42125K 39344K com.csr.BTApp 04. 2683 59124K 5

【经验】使用Profiler工具分析内存占用情况

Unity3D为我们提供了一个强大的性能分析工具Profiler.今天我们就使用Profiler来详细分析一下官方例子AngryBots的内存使用信息数据. 首先打开Profiler选择Memory选项,在游戏运行的某一帧查看Detailed选项数据(Simple模式的数据很直观,可以知道内存大体被哪部分占用了,网上也有很多相关介绍,我就不再啰嗦了),如下图所示: 选中后,unity会自动获取这一帧的内存占用数据项,主要分为:Other.Assets.BuiltinResources.Scene

Android 性能优化之使用MAT分析内存泄露问题

我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android设备的参差不齐,可能运行在这台设备好好的,运行在那台设备就报OOM,这些适配问题也是比较蛋疼的,比如我们平常运行着一个应用程序,运行的好好的,突然到某个Activity就给你爆出一个OOM的错误,你可能会以为是这个Activity导致的内存泄露,你会想到也有可能是内存有泄露吗?内存泄露就像一个定时炸

Java程序内存分析:使用mat工具分析内存占用

在工作中可能会遇到内存溢出这种灾难性的问题,那么程序肯定是存在问题,找出问题至关重要,上一篇文章讲了jmap命令的使用方法,当然用jmap导出的文件我们也看不懂啊,那就交给memory analyzer(mat)这个工具,让他帮助我们来观察程序的内存分布情况吧. 1. 用jmap生成堆信息 2. 将堆信息导入到mat中分析 3. 生成分析报告 Histogram Dominator Tree Top consumers Leak Suspects MAT 不是一个万能工具,它并不能处理所有类型的

如何监控 Tomcat 的内存占用情况

目录 1 JVM 内存模型中的区域 1.1 线程栈区 1.2 Java Heap 区 1.3 静态方法区 1.4 JDK 8.0中的元空间 2 JDK 工具的使用 3 查看 GC 日志信息 4 添加 JMS 远程监控 Tomcat 是运行在 JVM(Java Virtual Machine) 中的一个 Java 进程, 它在运行过程中对内存的占用情况, 可以借助一些 JDK 的工具进行监控, 为优化提供数据支撑. 1 JVM 内存模型中的区域 1.1 线程栈区 压入线程栈的每个栈帧(Stack

内存管理[6]测试堆的内存占用情况

本例效果图: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     Button2: TButton;     Memo1: TMemo;     Memo2: TMemo;     proce

Android开发实践:检测App的内存占用和泄漏

来源:http://www.linuxidc.com/Linux/2014-03/97563.htm 前段时间开发的Android应用,每次都是在运行了半个小时左右后突然挂掉了,很是莫名其妙,也不知道哪里出了问题,后来一步步排查,发现问题出在JNI层,一个被频繁调用的函数分配的内存忘记释放,导致内存泄漏. 这次问题使我明白,别以为Android程序是基于Java语言,有强大的垃圾回收机制,就完全不用担心内存问题,其实Android程序也要特别小心你的内存,因为毕竟手机不比PC机,内存是极其有限的

查看LINUX进程内存占用情况

可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: $ top -u oracle 内容解释: PID:进程的ID USE

[转]观察进程的内存占用情况

转:http://www.cnblogs.com/bravery/archive/2012/06/27/2560611.html 概述 想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题--你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存.这里我们可以看到VIRT.RES和SHR三个重要的指标,他们分别代表什么意思呢?这是本文需要跟大家一起探讨的问题.当然如果更加深入一点,你可能会问进程所占用的那些物理内存都用在了哪些