Androidフォンのプロセスメモリを表示する

adb shell dumpsys meminfopackage_nameまたはpid

例えば

adb shell dumpsys meminfo com.android.systemui

adb shell dumpsys meminfo com.android.settings

 

使用されているメモリの量を示す合計pss列を表示します

一般的に、メモリフットプリントには次のルールがあります。VSS> = RSS> = PSS> = USS 

VSS-仮想セットサイズ仮想メモリ消費量(共有ライブラリによって占有されているメモリを含む)
RSS-常駐セットサイズ実際に使用されている物理メモリ(共有ライブラリによって占有されているメモリを含む)
PSS-比例セットサイズ実際に使用されている物理メモリ(共有ライブラリによって占有されている)メモリ)
USS-プロセスのみが占有する一意のセットサイズの物理メモリ(共有ライブラリが占有するメモリを除く)

adbシェルdumpsysmeminfo | grep package_name

adbシェルdumpsysmeminfo | grep com.android.settings

adbシェルdumpsysmeminfo | 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:使用可能なメモリの数、アプリケーションで使用可能なメモリの数。システム内の一部のメモリが使用されていますが、再利用できます。たとえば、キャッシュ/バッファとスラブを再利用できるため、MemFreeは使用可能なすべてのメモリを表すことはできません。再利用可能なメモリとMemFreeのこの部分は、システムで使用可能なメモリです。つまり、MemAvailable≈MemFree+ Buffers + Cachedです。これは、特定のアルゴリズムを使用してカーネルによって計算され、推定値です。MemFreeとの主な違いは、MemFreeはシステムレベルを指し、MemAvailableはアプリケーションレベルを指すことです。

 

   MemoryInfo memoryInfo = new MemoryInfo();  

    private ActivityManager mActivityManager =(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);  
    //プライベートActivityManagermActivityManager = =(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;

    長いしきい値= 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);

    }

インポートjava.lang.Process;    
インポートjava.io.BufferedReader;
インポートjava.io.IOException;
インポートjava.io.InputStream;
インポートjava.io.InputStreamReader;    

        String cmd = "adb shell dumpsys meminfo com.android.settings";
        int mem_result = 0;
        {             プロセスp = Runtime.getRuntime()。exec(cmd);を試してください

            InputStream input = p.getInputStream();
            BufferedReaderリーダー= new BufferedReader(new InputStreamReader(input));
            文字列line = "";
            while((line = reader.readLine())!= null){                 if(line.startsWith( "TOTAL")){                     Log.i(TAG、line.trim());                     ブレーク;                 }             }             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