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