查看Linux & Android中内存占用方法

1. procrank (only for Android)

它从/proc/pid/maps中读取信息来进行统计。源码位于:/system/extras/procrank

内存耗用:VSS/RSS/PSS/USS
• VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
• RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
• PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
• USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

2. cat /proc/pid/status

VmPeak:     表示进程所占用最大虚拟内存大小
VmSize:      表示进程当前虚拟内存大小
VmLck:       表示被锁定的内存大小
VmHWM:    表示进程所占用物理内存的峰值
VmRSS:     表示进程当前占用物理内存的大小(与procrank中的RSS)
VmData:     表示进程数据段的大小
VmStk:       表示进程堆栈段的大小
VmExe:      表示进程代码的大小
VmLib:       表示进程所使用共享库的大小
VmPTE:      表示进程页表项的大小

 

3. 举例

  1. shell@android:/ $ procrank                                                       
  2.   PID    Vss       Rss      Pss      Uss  cmdline  
  3. 16044  247156K   94580K   81361K   79708K  com.android.pingpang  
  4. 16698  242440K   66436K   45516K   42064K  com.android.yujia  
  5.   
  6. shell@android:/ $ cat /proc/16044/status      
  7. VmPeak:   703476 kB  
  8. VmSize:   550940 kB  
  9. VmLck:         0 kB  
  10. VmHWM:    101500 kB  
  11. VmRSS:     94140 kB  
  12. VmData:   102016 kB  
  13. VmStk:       136 kB  
  14. VmExe:         8 kB  
  15. VmLib:     37968 kB  
  16. VmPTE:       346 kB  
  17. VmSwap:        0 kB  
  18. Threads:    22  
  19.   
  20. shell@android:/ $ cat /proc/16698/status                                         
  21. VmPeak:   693460 kB  
  22. VmSize:   516736 kB  
  23. VmLck:         0 kB  
  24. VmHWM:     71204 kB  
  25. VmRSS:     66060 kB  
  26. VmData:    58960 kB  
  27. VmStk:       136 kB  
  28. VmExe:         8 kB  
  29. VmLib:     46568 kB  
  30. VmPTE:       344 kB  
  31. VmSwap:        0 kB  
  32. Threads:    26 

查看基于Android 系统单个进程内存、CPU使用情况的几种方法

分类: Linux Kernel Android系统   554人阅读  评论(0)  收藏  举报
 一、利用Android API函数查看
1.1 ActivityManager查看可用内存。
ActivityManager.MemoryInfo outInfo = new ActivityManager.MemoryInfo(); 
am.getMemoryInfo(outInfo); 
outInfo.availMem即为可用空闲内存。
1.2、android.os.Debug查询PSS,VSS,USS等单个进程使用内存信息
MemoryInfo[] memoryInfoArray = am.getProcessMemoryInfo(pids); 
MemoryInfo pidMemoryInfo=memoryInfoArray[0];
pidMemoryInfo.getTotalPrivateDirty();

getTotalPrivateDirty()
Return total private dirty memory usage in kB. USS

getTotalPss()
Return total PSS memory usage in kB. 
PSS
getTotalSharedDirty()
Return total shared dirty memory usage in kB. RSS


二、直接对Android文件进行解析查询
/proc/cpuinfo系统CPU的类型等多种信息。
/proc/meminfo 系统内存使用信息

/proc/meminfo
MemTotal: 16344972 kB
MemFree: 13634064 kB
Buffers: 3656 kB
Cached: 1195708 kB
我们查看机器内存时,会发现MemFree的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
所以 空闲内存=free+buffers+cached=total-used
通过读取文件/proc/meminfo的信息获取Memory的总量。
ActivityManager. getMemoryInfo(ActivityManager.MemoryInfo)获取当前的可用Memory量。

 

三、通过Android系统提供的Runtime类,执行adb 命令(top,procrank,ps...等命令)查询
通过对执行结果的标准控制台输出进行解析。这样大大的扩展了Android查询功能.例如:
final Process m_process = Runtime.getRuntime().exec("/system/bin/top -n 1");
final StringBuilder sbread = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(m_process.getInputStream()), 8192);

# procrank
Runtime.getRuntime().exec("/system/xbin/procrank");
内存耗用:VSS/RSS/PSS/USS
Terms
• VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
• RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
• PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
• USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
USS is the total private memory for a process, i.e. that memory that is completely unique to that process.USS is an extremely useful number because it indicates the true incremental cost of running a particular process. When a process is killed, the USS is the total memory that is actually returned to the system. USS is the best number to watch when initially suspicious of memory leaks in a process.

 

四、dumpsys

dumpsys meminfo                                               
Applications Memory Usage (kB):
Uptime: 1031937 Realtime: 1167591179860

Total PSS by process:
    44049 kB: com.skyworth.launchersky_app_home (pid 911)
    16839 kB: system (pid 791)
    12835 kB: com.skyworth.standardservices (pid 1310)
    11233 kB: com.android.wallpaper (pid 881)
     9791 kB: com.skyworth.sky_app_atv (pid 1018)
     9782 kB: android.process.media (pid 1232)
     9622 kB: com.skyworth.hotkey (pid 1666)
     9279 kB: com.android.systemui (pid 866)
     7400 kB: com.android.email (pid 1265)
     7318 kB: com.mstar.tv.service (pid 1246)
     6980 kB: com.skyworthdigital.stb.dataprovider (pid 1335)
     5808 kB: com.android.exchange (pid 1286)
     4923 kB: com.android.inputmethod.pinyin (pid 892)
     4351 kB: com.android.providers.calendar (pid 985)
     4132 kB: com.android.calendar (pid 961)
     3548 kB: com.android.deskclock (pid 1059)

Total PSS by OOM adjustment:
    16839 kB: System
               16839 kB: system (pid 791)
     9279 kB: Persistent
                9279 kB: com.android.systemui (pid 866)
    44049 kB: Foreground
               44049 kB: com.skyworth.launchersky_app_home (pid 911)
    11233 kB: Visible
               11233 kB: com.android.wallpaper (pid 881)
    25076 kB: Perceptible
               12835 kB: com.skyworth.standardservices (pid 1310)
                7318 kB: com.mstar.tv.service (pid 1246)
                4923 kB: com.android.inputmethod.pinyin (pid 892)
     6980 kB: A Services
                6980 kB: com.skyworthdigital.stb.dataprovider (pid 1335)
     9791 kB: Previous
                9791 kB: com.skyworth.sky_app_atv (pid 1018)
    44643 kB: Background
                9782 kB: android.process.media (pid 1232)
                9622 kB: com.skyworth.hotkey (pid 1666)
                7400 kB: com.android.email (pid 1265)
                5808 kB: com.android.exchange (pid 1286)
                4351 kB: com.android.providers.calendar (pid 985)
                4132 kB: com.android.calendar (pid 961)
                3548 kB: com.android.deskclock (pid 1059)

Total PSS by category:
    56161 kB: Dalvik
    30951 kB: Native
    28795 kB: Unknown
    24122 kB: .so mmap
    18489 kB: .dex mmap
     7047 kB: Other mmap
     1109 kB: .ttf mmap
     1036 kB: .apk mmap
       88 kB: Other dev
       52 kB: Ashmem
       24 kB: .jar mmap
       16 kB: Cursor

Total PSS: 167890 kB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值