欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Android 中 如何监控 某个磁盘有哪些进程或线程在持续的读写

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

2025/2/25 19:26:24 来源:https://blog.csdn.net/jiasting/article/details/145793407  浏览:    关键词: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_bytes 和 write_bytes 的变化,找出持续读写的进程。

    bash

    复制

    # 监控所有进程的磁盘读写
    adb shell "while true; dofor pid in \$(ls /proc | grep '^[0-9]\+$'); doif [ -f /proc/\$pid/io ]; thenecho \"PID: \$pid\"grep 'read_bytes\|write_bytes' /proc/\$pid/iofidonesleep 1cleardone
    "

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>    COMMAND1234   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

五、自动化脚本示例

结合 proc 和 grep 编写监控脚本:

bash

复制

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

总结

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词