查看Android手机进程内存

adb shell dumpsys meminfo package_name or pid

e.g.

adb shell dumpsys meminfo com.android.systemui

adb shell dumpsys meminfo  com.android.settings

查看total pss列,表示使用了多少内存

一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS 

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

adb shell dumpsys meminfo | grep package_name

adb shell dumpsys meminfo | grep com.android.settings

adb shell dumpsys meminfo | grep com.android.systemui

ps -A | grep -i cameraserver

ps -A | grep -i com.android.systemui

adb shell cat /proc/meminfo

MemFree:空闲内存数,  表示系统尚未使用的内存。MemUsed=MemTotal-MemFree就是已被用掉的内存。

MemAvailable:可用内存数,  应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上MemFree才是系统可用的内存,即:MemAvailable≈MemFree+Buffers+Cached,它是内核使用特定的算法计算出来的,是一个估计值。它与MemFree的关键区别点在于,MemFree是说的系统层面,MemAvailable是说的应用程序层面。

   MemoryInfo memoryInfo = new MemoryInfo() ;  

    private ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);  
    //private ActivityManager mActivityManager = = (ActivityManager)getInstrumentation().getTargetContext().getSystemService(Context.ACTIVITY_SERVICE);

 ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();

    mActivityManager.getMemoryInfo(memoryInfo) ;  
    long availMem = memoryInfo.availMem/1024/1024 ;  
    long totalMem = memoryInfo.totalMem/1024/1024;

    long threshold = memoryInfo.threshold/1024/1024;

Log.i(TAG, "totalMem ="+totalMem +" availMem="+availMem+" threshold ="+threshold);

private void getProcessMemroy() {
    //ActivityManager am = (ActivityManager) getInstrumentation()
    //        .getContext().getSystemService(Context.ACTIVITY_SERVICE);

    ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
   List<RunningAppProcessInfo> apps = am.getRunningAppProcesses();

    for (RunningAppProcessInfo proc : apps) {
        Log.i(TAG, "process:"+proc.processName);
        if (!proc.processName.contains("com.android.settings")) {
            continue;
        }

        int[] pids = new int[1];
        pids[0]=proc.pid;

        MemoryInfo meminfo = am.getProcessMemoryInfo(pids)[0];
        Log.i(TAG, "pid="+proc.pid+" totalPSS="+meminfo.getTotalPss()/1024+" nativePSS="+meminfo.nativePss/1024+" dalvikPSS="+meminfo.dalvikPss/1024);

    }

import java.lang.Process;    
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;    

        String cmd = "adb shell dumpsys meminfo com.android.settings";
        int mem_result = 0;
        try {
            Process p = Runtime.getRuntime().exec(cmd);

            InputStream input = p.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            String line = "";
            while ((line = reader.readLine()) != null) {
                if (line.startsWith("        TOTAL")) {
                    Log.i(TAG, line.trim());
                    break;
                }
            }
            reader.close();
            input.close();
        } catch (IOException e) {
           Log.e(TAG, "dumpsys meminfo failed "+e);
        }

#!/bin/bash

adb root
adb wait-for-device
adb shell setenforce 0

for (( i = 1; i < 10; i++));
do
time1=$(date "+%Y%m%d-%H%M%S")
echo $time1 >> ./log.txt
adb shell dumpsys meminfo >> ./log.txt
sleep 20s
done

猜你喜欢

转载自blog.csdn.net/kv110/article/details/103644203