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

先来看下procrank

 sh-4.2# procrank
PID Vss Rss Pss Uss cmdline
59840K 59708K 42125K 39344K com.csr.BTApp
59124K 59040K 37960K 33032K com.android.launcher
51572K 51488K 35686K 33604K android.process.acore
32808K 32748K 16775K 14716K system_server
20560K 17560K 12739K 8940K /system/bin/surfaceflinger
30124K 30036K 12085K 7996K com.android.systemui
27680K 27596K 9929K 7040K com.baidu.input
20764K 20676K 5522K 3788K com.android.phone
21892K 21800K 4591K 1920K com.apical.dreamthemetime
19880K 19792K 4438K 2644K com.csr.csrservices
19592K 19480K 3525K 1360K zygote
2960K 2960K 2407K 2356K /system/bin/mediaserver
1784K 1784K 1209K 1116K /system/bin/synergy_service
3404K 1348K 1133K 1124K /usr/bin/gpsexe
1468K 1468K 959K 928K /system/bin/drmserver
692K 692K 692K 692K /bin/sh
1060K 1060K 630K 604K /system/bin/audiotransfer
656K 652K 456K 444K procrank
664K 664K 403K 392K /system/bin/netd
584K 584K 331K 320K /system/bin/vold
548K 548K 270K 256K /system/bin/rild
416K 412K 212K 204K /system/bin/dbus-daemon
336K 332K 170K 164K /system/bin/keystore
164K 164K 144K 144K /init
152K 152K 136K 136K /sbin/adbd
312K 312K 112K 104K /system/bin/dvdd
328K 324K 109K 100K /system/bin/installd
268K 264K 102K 96K /system/bin/servicemanager
84K 84K 84K 84K /sbin/ueventd
260K 256K 83K 76K /system/bin/debuggerd
------ ------ ------
195031K 163724K TOTAL 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查看内存信息

 
 sh-4.2# dumpsys meminfo
Applications Memory Usage (kB):
Uptime: Realtime: Total PSS by process:
kB: com.csr.BTApp (pid )
kB: com.android.launcher (pid )
kB: android.process.acore (pid )
kB: system (pid )
kB: com.android.systemui (pid )
kB: com.baidu.input (pid )
kB: com.android.phone (pid )
kB: com.apical.dreamthemetime (pid )
kB: com.csr.csrservices (pid )
kB: com.apical.apicalradio (pid ) Total PSS by OOM adjustment:
kB: System
kB: system (pid )
kB: Persistent
kB: com.android.systemui (pid )
kB: com.android.phone (pid )
kB: com.csr.csrservices (pid )
kB: Foreground
kB: com.android.launcher (pid )
kB: Perceptible
kB: com.csr.BTApp (pid )
kB: android.process.acore (pid )
kB: com.baidu.input (pid )
kB: A Services
kB: com.apical.dreamthemetime (pid )
kB: Background
kB: com.apical.apicalradio (pid ) Total PSS by category:
kB: Dalvik
kB: Other dev
kB: Native
kB: Cursor
kB: Unknown
kB: Other mmap
kB: .so mmap
kB: .apk mmap
kB: .dex mmap
kB: .ttf mmap
kB: Ashmem
kB: .jar mmap Total PSS: kB

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

 
 sh-4.2# dumpsys meminfo com.android.launcher
Applications Memory Usage (kB):
Uptime: Realtime: ** MEMINFO in pid [com.android.launcher] **
Shared Private Heap Heap Heap
Pss Dirty Dirty Size Alloc Free
------ ------ ------ ------ ------ ------
Native
Dalvik
Cursor
Ashmem
Other dev
.so mmap
.jar mmap
.apk mmap
.ttf mmap
.dex mmap
Other mmap
Unknown
TOTAL Objects
Views: ViewRootImpl:
AppContexts: Activities:
Assets: AssetManagers:
Local Binders: Proxy Binders:
Death Recipients:
OpenSSL Sockets: SQL
heap: MEMORY_USED:
PAGECACHE_OVERFLOW: MALLOC_SIZE: DATABASES
pgsz dbsz Lookaside(b) cache Dbname
// launcher.db Asset Allocations
zip:/system/app/Launcher2.apk:/resources.arsc: 340K
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能做的事还有很多

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

adb shell top

top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序.

top 用法

>adb shell top -h
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [-t ] [ -h ]
-m num Maximum number of processes to display. 最多显示多少个进程
-n num Updates to show before exiting. 刷新次数
-d num Seconds to wait between updates. 刷新间隔时间(默认5秒)
-s col Column to sort by (cpu,vss,rss,thr). 按哪列排序
-t Show threads instead of processes. 显示线程信息而不是进程
-h Display this help screen. 显示帮助文档

adb shell top

> adb shell top

User 13%, System 5%, IOW 0%, IRQ 0%
User 85 + Nice 0 + Sys 37 + Idle 509 + IOW 0 + IRQ 0 + SIRQ 0 = 631 PID PR CPU% S #THR VSS RSS PCY UID Name
22205 0 13% S 56 423416K 88160K fg u0_a92 com.tmall.wireless
24310 1 2% R 1 1232K 536K root top
22600 0 1% S 46 341712K 40872K fg u0_a90 com.wandoujia.phoenix2.usbproxy
31125 1 1% S 31 319976K 33284K fg u0_a74 com.android.Chinpower
1533 0 1% S 32 67320K 20552K fg system /system/bin/surfaceflinger
1852 0 1% S 112 445876K 80304K fg system system_server
...
10 0 0% S 1 0K 0K root watchdog/0
16 1 0% S 1 0K 0K root khelper
22 1 0% S 1 0K 0K root suspend_sys_syn
23 1 0% S 1 0K 0K root suspend

第一组数据的含义:

User  处于用户态的运行时间,不包含优先值为负进程
Nice 优先值为负的进程所占用的CPU时间
Sys 处于核心态的运行时间
Idle 除IO等待时间以外的其它等待时间
IOW IO等待时间
IRQ 硬中断时间
SIRQ 软中断时间

第二组数据的含义:

PID   进程id
PR 优先级
CPU% 当前瞬时CPU占用率
S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
#THR 程序当前所用的线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
UID 进程所有者的用户id
Name 进程的名称

具体信息可以查看源代码中: xx\system\core\toolbox\top.c

监控CPU的命令使用实战

>adb shell top  | findstr tmall > d:\cpu.txt

打印 top命令,并查找 包含 tmall的命令行,输出至 d:\cpu.txt

result:

22137  1   0% S    10 304728K  28900K  bg u0_a92   com.tmall.wireless:push

22205  0   0% S    15 322944K  38236K  bg u0_a92   com.tmall.wireless

22205  1  27% R    34 345304K  49396K  fg u0_a92   com.tmall.wireless

22112  1   0% S     9 303704K  29380K  bg u0_a92   com.tmall.wireless:containerprocess1

22137  1   0% S    10 304728K  28900K  bg u0_a92   com.tmall.wireless:push

22252  1   0% S     9 302600K  28596K  fg u0_a92   com.tmall.wireless:notify

22205  0  45% R    40 365500K  56708K  fg u0_a92   com.tmall.wireless

22252  0  22% S    19 325476K  40868K  bg u0_a92   com.tmall.wireless:notify

22137  0   2% S    14 308944K  31320K  fg u0_a92   com.tmall.wireless:push

22112  0   0% S     9 305892K  29888K  bg u0_a92   com.tmall.wireless:containerprocess1

22137  1  14% S    17 323080K  39696K  bg u0_a92   com.tmall.wireless:push

22252  0   3% S    21 327656K  41556K  bg u0_a92   com.tmall.wireless:notify

22205  1   2% S    38 366420K  59700K  fg u0_a92   com.tmall.wireless

22112  0   0% S     9 305892K  29888K  bg u0_a92   com.tmall.wireless:containerprocess1

22408  0   0% R     9 278424K  21936K  fg u0_a92   com.tmall.wireless:utremote

22408  1   7% S     9 304180K  30964K  bg u0_a92   com.tmall.wireless:utremote

22205  0   2% R    39 367456K  59612K  fg u0_a92   com.tmall.wireless
 

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

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

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

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

    Unity3D为我们提供了一个强大的性能分析工具Profiler.今天我们就使用Profiler来具体分析一下官方样例AngryBots的内存使用信息数据. 首先打开Profiler选择Memory选 ...

  2. Android Studio和MAT结合使用来分析内存问题

    Android开发中时常会遇到内存泄漏的问题,而Android系统对单个App又有一定的内存限制,此值可以通过一下方式获取: ActivityManager am = (ActivityManager ...

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

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. Top命令内存占用剖析

    原文: http://yalung929.blog.163.com/blog/static/203898225201212981731971/ 引 言: top命令作为Linux下最常用的性能分析工具 ...

  5. 分析内存使用情况 (JavaScript)

    [此文档是初定版,随时可能进行更改.] JavaScript 内存分析器在 Visual Studio 2012 更新 1 和 Visual Studio 2013 中提供,旨在帮助你了解内存使用量和 ...

  6. 使用showmap分析android进程内存占用情况(转载)

    转自:http://my.oschina.net/shaorongjie/blog/105354 可以使用adb shell showmap pid查看一个进程的showmap,这对于我们来说非常有用 ...

  7. Linux系统下分析内存使用情况的管理工具

    有许多办法可以获得Linux系统上所安装内存的信息,并查看其中有多少内存正在使用中.有的命令会展示大量的细节,而有的命令则提供了简洁(但不一定容易理解)的结果.在这篇文章中将介绍一些更有用的工具,帮助 ...

  8. 如何使用memstat 插件分析内存泄漏问题

    对于内存泄漏问题,如何分析并找到内存泄漏的原因是个难点.KingbaseES 提供了memstat 扩展插件用于分析内存泄漏的原因. 一.使用 memstat 插件 1.修改shared_preloa ...

  9. android应用内存占用测试(每隔一秒打印procrank的信息)

    1.内存占用 对于智能手机而言,内存大小是固定的:因此,如果单个app的内存占用越小,手机上可以安装运行的app就越多:或者说app的内存占用越小,在手机上运行就会越流畅.所以说,内存占用的大小,也是 ...

随机推荐

  1. joyoi2020/lfyzoj114 Rainbow 的信号

    位与位间互不影响.一位一位计算. 长度为 \(1\) 的区间,选出概率为 \(1/n^2\).其余区间,选出概率为 \(2/n^2\).(这里的区间 \(l \leq r\)) 枚举右端点.记 \(l ...

  2. centos dhcp 服务器搭建 多vlan

    centos dhcp 服务器搭建   多vlan centos 6.5   版本     /etc/dhcp/dhcpd.conf         服务器配置文件 /etc/rc.d/init.d/ ...

  3. linux下查看进程(ps命令)

    转自:http://www.jb51.net/LINUXjishu/151851.html Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命 ...

  4. RocketMQ VS kafka

    转自:https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用MySQL作为消息存 ...

  5. 【bzoj4240】有趣的家庭菜园 贪心+树状数组

    题目描述 对家庭菜园有兴趣的JOI君每年在自家的田地中种植一种叫做IOI草的植物.JOI君的田地沿东西方向被划分为N个区域,由西到东标号为1~N.IOI草一共有N株,每个区域种植着一株.在第i个区域种 ...

  6. 常州模拟赛d2t3 小X的佛光

    平日里最喜欢做的事就是蒸发学水.[题目描述]小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X 城时只建造 N ...

  7. 什么是JNI?

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C和C++)

  8. uva 11762 数学期望+记忆化搜索

    题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...

  9. *Codeforces961G. Partitions

    $k \leq n \leq 100000$,求式子$Ans=\sum_{i=1}^n w_i\sum_{j=1}^n j\binom{n-1}{n-j} \{ ^{n-j}_{k-1} \}$. 题 ...

  10. linux 管道符号 | ,以及&& ||等等特殊符号笔记

    管道和重导向:“|”.“>”.“>>”.“<” 重导向就是使命令改变它所认定的标准输出.“>”可将结果输出到文件中,该文件原有内容会被删除,“>>”则将结果附 ...