Android 中 怎样监控 某个磁盘有哪些历程或线程在持续的读写 ...

道家人  金牌会员 | 6 天前 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

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

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

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

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

  • 获取所有历程的 PID
    bash
    复制
    1. adb shell ps -A
    复制代码
  • 查察某个历程的 I/O 统计
    bash
    复制
    1. adb shell cat /proc/[pid]/io
    复制代码
    输出示例:
    复制
    1. rchar: 12345      # 读取的字符数(包括缓存)
    2. wchar: 67890      # 写入的字符数
    3. read_bytes: 1024  # 实际磁盘读取字节数
    4. write_bytes: 2048 # 实际磁盘写入字节数
    复制代码
  • 编写脚本动态监控
    通过定期读取 read_bytes 和 write_bytes 的变革,找出持续读写的历程。
    bash
    复制
    1. # 监控所有进程的磁盘读写
    2. adb shell "
    3.   while true; do
    4.     for pid in \$(ls /proc | grep '^[0-9]\+$'); do
    5.       if [ -f /proc/\$pid/io ]; then
    6.         echo "PID: \$pid"
    7.         grep 'read_bytes\|write_bytes' /proc/\$pid/io
    8.       fi
    9.     done
    10.     sleep 1
    11.     clear
    12.   done
    13. "
    复制代码

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

Android 的 dumpsys 可以输出磁盘使用环境,但信息较为概括:
bash
复制
  1. adb shell dumpsys diskstats
复制代码
输出示例:
复制
  1. Latency: 1ms [100ms]
  2. Data-Free: 12345678K /data-free
  3. System-Free: 2345678K /system-free
  4. ...
复制代码

3. 使用 strace 跟踪系统调用

通过 strace 监控历程的文件读写操纵(需 Root 权限):
bash
复制
  1. # 跟踪某个进程的所有文件读写操作
  2. adb shell strace -p [pid] -e trace=read,write
复制代码


  • 缺点:性能开销大,仅适合短时间调试。

二、使用第三方工具

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

iotop 类似 Linux 的 top,但专注于磁盘 I/O。若装备支持,安装后可直接运行:
bash
复制
  1. adb shell iotop
复制代码
输出示例:
复制
  1.   PID   PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
  2. 1234   be/3 root        0.00 B      3.76 K  0.00 %  0.00 % some_process
复制代码

2. lsof(需 Root 或 Busybox)

查察哪些历程打开了特定文件或目录:
bash
复制
  1. # 查看访问某个路径的进程
  2. adb shell lsof /sdcard/example.txt
复制代码

三、使用性能分析工具

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

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

  • 连接装备并启动应用。
  • 打开 Android Profiler,选择 Disk 标签。
  • 查察文件读写操纵和堆栈跟踪。

2. Systrace 或 Perfetto

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

  • 生成跟踪文件:
    bash
    复制
    1. adb shell perfetto --config :disk --out /data/local/tmp/trace.pftrace
    复制代码
  • 下载并分析文件(使用 ui.perfetto.dev):
    bash
    复制
    1. adb pull /data/local/tmp/trace.pftrace
    复制代码

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

1. 使用 ftrace 跟踪块装备 I/O


  • 启用块装备跟踪:
    bash
    复制
    1. adb shell "echo 1 > /sys/kernel/debug/tracing/events/block/enable"
    复制代码
  • 捕捉事件:
    bash
    复制
    1. adb shell cat /sys/kernel/debug/tracing/trace_pipe
    复制代码

五、主动化脚本示例

结合 proc 和 grep 编写监控脚本:
bash
复制
  1. #!/bin/bash
  2. # 监控指定磁盘路径的读写进程(例如 /sdcard)
  3. adb shell "
  4.   while true; do
  5.     echo '===== $(date) ====='
  6.     for pid in \$(lsof | grep '/sdcard' | awk '{print \$2}' | sort -u); do
  7.       if [ -f /proc/\$pid/io ]; then
  8.         echo "PID: \$pid \$(cat /proc/\$pid/cmdline)"
  9.         grep 'read_bytes\|write_bytes' /proc/\$pid/io
  10.       fi
  11.     done
  12.     sleep 2
  13.   done
  14. "
复制代码

总结

方法实用场景所需权限/proc/[pid]/io历程级 I/O 统计无需 Rootdumpsys diskstats系统级磁盘使用概览无需 Rootstrace实时跟踪文件读写系统调用Root 权限iotop/lsof实时监控高 I/O 历程Root 或 BusyboxAndroid Profiler应用开发调试无需 Root内核跟踪(ftrace)深度分析块装备 I/ORoot 和内核支持 根据需求选择符合的工具,优先尝试非 Root 方法(如 /proc 和 dumpsys),如需更具体信息再使用 Root 工具(如 strace 或 iotop)。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表