You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ADB获取Android设备进程固定周期的缺页故障数据?

自定义周期获取Android进程缺页故障数据的可行方案

方案1:基于proc/{pid}/stat的定时采样脚本

/proc/{pid}/stat文件直接存储了进程启动以来的**主缺页故障(maj_flt)和次缺页故障(min_flt)**累计值,你可以通过定时采样、计算增量的方式,实现自定义时间窗口的统计。

脚本示例

#!/bin/sh
# 参数说明:目标PID、采样间隔(秒)、采样次数
TARGET_PID=$1
SAMPLING_INTERVAL=$2
SAMPLING_TIMES=$3

# 获取初始累计值
read -r _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ MIN_FLT_START MAJ_FLT_START < /proc/$TARGET_PID/stat

for i in $(seq 1 $SAMPLING_TIMES); do
    sleep $SAMPLING_INTERVAL
    # 获取当前累计值
    read -r _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ MIN_FLT_CURRENT MAJ_FLT_CURRENT < /proc/$TARGET_PID/stat
    # 计算周期内增量
    MIN_FLT_DELTA=$((MIN_FLT_CURRENT - MIN_FLT_START))
    MAJ_FLT_DELTA=$((MAJ_FLT_CURRENT - MAJ_FLT_START))
    echo "[$(date +%Y-%m-%d_%H:%M:%S)] 次缺页增量: $MIN_FLT_DELTA | 主缺页增量: $MAJ_FLT_DELTA"
    # 更新初始值为当前值,用于下一次计算
    MIN_FLT_START=$MIN_FLT_CURRENT
    MAJ_FLT_START=$MAJ_FLT_CURRENT
done

使用步骤

# 推送脚本到设备
adb push page_fault_sample.sh /data/local/tmp/
# 赋予执行权限
adb shell chmod +x /data/local/tmp/page_fault_sample.sh
# 执行采样:PID为1234的进程,每5秒采样一次,共采10次
adb shell /data/local/tmp/page_fault_sample.sh 1234 5 10

这个方案完全自定义周期,数据准确无额外依赖,仅需自行处理进程退出、权限等异常情况。

方案2:Perfetto SQL筛选单个进程缺页数据

Perfetto支持通过SQL精准提取单个进程的缺页事件,只需先录制包含缺页轨迹的trace文件,再通过查询聚合数据:

录制trace文件

adb shell perfetto -o /data/local/tmp/page_fault_trace.trace -t 30s \
    -c '
buffers: {
    size_kb: 8192
}
data_sources: {
    config {
        name: "linux.page_faults"
    }
}
data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 0
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}'

解析单个进程数据

将trace文件拉到本地后,用Perfetto UI或命令行执行SQL查询,例如筛选PID为1234的进程,按1秒周期聚合:

SELECT
    ts / 1000000000 as timestamp,
    pid,
    process.name,
    CASE type WHEN 1 THEN "主缺页" WHEN 2 THEN "次缺页" END as fault_type,
    COUNT(*) as fault_count
FROM page_faults
JOIN process USING (pid)
WHERE pid = 1234
GROUP BY timestamp, pid, fault_type
ORDER BY timestamp

命令行解析方式:

perfetto query -i page_fault_trace.trace --sql "SELECT ..."

该方案无需手动计算增量,还能关联进程名称等信息,适合复杂分析场景。

方案3:dumpsys meminfo辅助采样

虽然dumpsys meminfo不支持自定义周期,但它会输出进程的缺页累计值,你可以结合定时脚本计算增量:

adb shell dumpsys meminfo <PID> | grep Faults

输出示例:

Faults: 1234 minor, 56 major


内容的提问来源于stack exchange,提问作者Shazer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:57:12