Android 中 如何监控 某个磁盘有哪些进程或线程在持续的读写

在 Android 系统中监控某个磁盘的进程或线程的持续读写操作,可以通过以下方法实现。根据设备权限(如是否已 Root)和需求的不同,选择适合的工具或命令:


一、使用系统内置工具和命令

1. 通过 proc 文件系统获取进程 I/O 信息

每个进程的 I/O 统计信息存储在 /proc/[pid]/io 文件中。可以通过以下步骤监控:

  1. 获取所有进程的 PID

    bash

    复制

    复制代码
    adb shell ps -A
  2. 查看某个进程的 I/O 统计

    bash

    复制

    复制代码
    adb shell cat /proc/[pid]/io

    输出示例:

    复制

    复制代码
    rchar: 12345      # 读取的字符数(包括缓存)
    wchar: 67890      # 写入的字符数
    read_bytes: 1024  # 实际磁盘读取字节数
    write_bytes: 2048 # 实际磁盘写入字节数
  3. 编写脚本动态监控

    通过定期读取 read_byteswrite_bytes 的变化,找出持续读写的进程。

    bash

    复制

    复制代码
    # 监控所有进程的磁盘读写
    adb shell "
      while true; do
        for pid in \$(ls /proc | grep '^[0-9]\+$'); do
          if [ -f /proc/\$pid/io ]; then
            echo \"PID: \$pid\"
            grep 'read_bytes\|write_bytes' /proc/\$pid/io
          fi
        done
        sleep 1
        clear
      done
    "

2. 使用 dumpsys 命令获取磁盘统计

Android 的 dumpsys 可以输出磁盘使用情况,但信息较为概括:

bash

复制

复制代码
adb shell dumpsys diskstats

输出示例:

复制

复制代码
Latency: 1ms [100ms]
Data-Free: 12345678K /data-free
System-Free: 2345678K /system-free
...

3. 使用 strace 跟踪系统调用

通过 strace 监控进程的文件读写操作(需 Root 权限):

bash

复制

复制代码
# 跟踪某个进程的所有文件读写操作
adb shell strace -p [pid] -e trace=read,write
  • 缺点:性能开销大,仅适合短时间调试。

二、使用第三方工具

1. iotop(需 Root 或自定义内核支持)

iotop 类似 Linux 的 top,但专注于磁盘 I/O。若设备支持,安装后可直接运行:

bash

复制

复制代码
adb shell iotop

输出示例:

复制

复制代码
  PID   PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 1234   be/3 root        0.00 B      3.76 K  0.00 %  0.00 % some_process

2. lsof(需 Root 或 Busybox)

查看哪些进程打开了特定文件或目录:

bash

复制

复制代码
# 查看访问某个路径的进程
adb shell lsof /sdcard/example.txt

三、使用性能分析工具

1. Android Profiler(针对应用开发者)

在 Android Studio 中,使用 Profiler 监控应用的磁盘 I/O:

  1. 连接设备并启动应用。

  2. 打开 Android Profiler ,选择 Disk 标签。

  3. 查看文件读写操作和堆栈跟踪。


2. Systrace 或 Perfetto

通过系统级跟踪工具分析 I/O 行为:

  1. 生成跟踪文件:

    bash

    复制

    复制代码
    adb shell perfetto --config :disk --out /data/local/tmp/trace.pftrace
  2. 下载并分析文件(使用 ui.perfetto.dev):

    bash

    复制

    复制代码
    adb pull /data/local/tmp/trace.pftrace

四、内核级监控(需 Root 和内核支持)

1. 使用 ftrace 跟踪块设备 I/O
  1. 启用块设备跟踪:

    bash

    复制

    复制代码
    adb shell "echo 1 > /sys/kernel/debug/tracing/events/block/enable"
  2. 捕获事件:

    bash

    复制

    复制代码
    adb shell cat /sys/kernel/debug/tracing/trace_pipe

五、自动化脚本示例

结合 procgrep 编写监控脚本:

bash

复制

复制代码
#!/bin/bash
# 监控指定磁盘路径的读写进程(例如 /sdcard)
adb shell "
  while true; do
    echo '===== $(date) ====='
    for pid in \$(lsof | grep '/sdcard' | awk '{print \$2}' | sort -u); do
      if [ -f /proc/\$pid/io ]; then
        echo \"PID: \$pid \$(cat /proc/\$pid/cmdline)\"
        grep 'read_bytes\|write_bytes' /proc/\$pid/io
      fi
    done
    sleep 2
  done
"

总结

方法 适用场景 所需权限
/proc/[pid]/io 进程级 I/O 统计 无需 Root
dumpsys diskstats 系统级磁盘使用概览 无需 Root
strace 实时跟踪文件读写系统调用 Root 权限
iotop/lsof 实时监控高 I/O 进程 Root 或 Busybox
Android Profiler 应用开发调试 无需 Root
内核跟踪(ftrace) 深度分析块设备 I/O Root 和内核支持

根据需求选择合适的工具,优先尝试非 Root 方法(如 /procdumpsys),如需更详细信息再使用 Root 工具(如 straceiotop)。

相关推荐
鸿蒙布道师6 小时前
鸿蒙NEXT开发Base64工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
jiet_h6 小时前
Android adb 的功能和用法
android·adb
美狐美颜sdk7 小时前
美颜SDK兼容性挑战:如何让美颜滤镜API适配iOS与安卓?
android·深度学习·ios·美颜sdk·第三方美颜sdk·视频美颜sdk
居然是阿宋7 小时前
深入理解 YUV 颜色空间:从原理到 Android 视频渲染
android·音视频
KevinWang_8 小时前
DialogFragment 不适合复用
android
古鸽100869 小时前
Audio Hal 介绍
android
小叶不焦虑10 小时前
关于 Android 系统回收站的实现
android
木西10 小时前
从0到1搭建一个RN应用从开发测试到上架全流程
android·前端·react native
小橙子207710 小时前
一条命令配置移动端(Android / iOS)自动化环境
android·ios·自动化
和煦的春风11 小时前
案例分析 | SurfaceFlinger Binder RT 被降级到CFS
android