adb shell dumpsys cpuinfo
显示来自 /proc/stat 和 /proc/(pid)/stat 的信息
1.这里的故障代表什么?
页面错误。
“minor”指轻微的错误。
来自 ProcessCpuTracker.java
collectStats(...) {
...
final long[] procStats = mProcessStatsData;
if (!Process.readProcFile(st.statFile.toString(),
PROCESS_STATS_FORMAT, null, procStats, null)) {
continue;
}
...
final long minfaults = procStats[PROCESS_STAT_MINOR_FAULTS];
final long majfaults = procStats[PROCESS_STAT_MAJOR_FAULTS];
}
private static final int[] PROCESS_STATS_FORMAT = new int[] {
...
PROC_SPACE_TERM|PROC_OUT_LONG, // 10: minor faults
...
PROC_SPACE_TERM|PROC_OUT_LONG, // 12: major faults
...
};
它们是 /proc/(pid)/stat data[9] 和 data[11]。
2.它们相加不到100
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
(链接页面来自解释 dumpsys cpuinfo https://stackoverflow.com/questions/24612982/interpreting-dumpsys-cpuinfo)
对于多处理器系统,总和可以超过100%。
3.这些百分比值是各个过程的平均值吗
来自 ProcessCpuTracker.java
printProcessCPU(...) {
...
printRatio(pw, user+system+iowait+irq+softIrq, totalTime);
...
}
打印第二个参数(用户+...)/第三个参数(totalTime)。
4.CPU使用率从23770ms到16630ms前
时间基于 ProcessCpuTracker 缓存的统计数据更新时间。
来自 ProcessCpuTracker.java
update() {
final long nowUptime = SystemClock.uptimeMillis();
...
mLastSampleTime = mCurrentSampleTime;
mCurrentSampleTime = nowUptime;
...
}
[相关来源]
https://android.googlesource.com/platform/frameworks/native/+/master/cmds/dumpsys/dumpsys.cpp https://android.googlesource.com/platform/frameworks/native/+/master/cmds/dumpsys/dumpsys.cpp
主() => 服务->转储()
https://github.com/android/platform_frameworks_base/blob/master/services/core/java/com/android/server/am/ActivityManagerService.java https://github.com/android/platform_frameworks_base/blob/master/services/core/java/com/android/server/am/ActivityManagerService.java
调用 CpuBinder.dump()
mProcessCpuThread 更新统计缓存。 (调用 updateCpuStatsNow())
https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/os/ProcessCpuTracker.java https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/os/ProcessCpuTracker.java
printCurrentLoad() 打印 CPU 负载
printCurrentState() 打印每个进程的统计信息