dumpsys 地图:服务状态与关键段落
2026/8/9大约 3 分钟调试工具Android 14dumpsys服务状态排障
dumpsys 地图:服务状态与关键段落
上一章看了 logcat。这一章回答:dumpsys 能看什么,常用服务有哪些,输出巨大时怎么 快速定位关键段落?
dumpsys 通过 Binder 调用服务的 dump 接口,因此输出语义由具体服务决定。采集结果只 代表命令执行时刻;要判断状态如何形成,仍需与前后的 logcat 或 trace 对齐。
dumpsys 是状态快照,不是事件历史
| 常见误解 | 正确理解 |
|---|---|
| dumpsys 是日志 | 它是各服务当前的内部状态快照,随时间变化 |
| dumpsys 只能看一个东西 | 不同服务输出完全不同,先 dumpsys -l 看清单 |
| 输出越多越有用 | 输出很大,用 grep/sed 提取关键段落才是常态 |
核心结论
dumpsys -l列出可用服务,先看清单再选目标。- 常用服务:activity、package、window、input、meminfo、gfxinfo、battery、netstats。
- 每个服务内部有关键段落,用 grep/sed 提取,不要全量阅读。
- dumpsys 只给当前状态,多次采样对比才能看趋势。
- 状态异常先看状态,再看事件流与时间线定位原因。
服务选择地图
逐步解释:
- 进程/组件问题:
dumpsys activity。 - 包/权限问题:
dumpsys package。 - 窗口/焦点问题:
dumpsys window。 - 输入问题:
dumpsys input。 - 内存与帧:
dumpsys meminfo、dumpsys gfxinfo。 - 其他服务:先
dumpsys -l查清单。
常用命令
环境:开发设备或模拟器;以下命令不需要 root。
adb shell dumpsys -l
adb shell dumpsys activity processes | grep -iE "anr|crash"
adb shell dumpsys package <包名> | grep -A20 "runtime permissions"
adb shell dumpsys window | grep -iE "focus|mCurrentFocus"
adb shell dumpsys input | sed -n '/Input Dispatcher State/,/Pending events/p'
adb shell dumpsys meminfo <包名>先 -l 确认服务存在,再用目标服务的 grep/sed 段落提取。输出巨大不是问题, 不会提取才是问题。
源码证据
阅读目标:确认 dumpsys 的实现入口。
正文指针:frameworks/native/services/dumpsys/ 的主程序;各服务的 dump() 方法。
// 示例:服务的 dump()(伪代码,行号以 r75 为准)
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
// 打印内部状态
}这段代码证明: 每个服务的 dump 内容由自己定义;dumpsys 只负责把参数转发并汇总 输出。因此不同服务的格式差异是设计使然。
验证与排障
环境:开发设备或模拟器。
adb shell dumpsys activity services
adb shell dumpsys dropbox --print | tail -50
adb shell dumpsys | grep -iE "error|exception"排查时先按问题选服务,再提取关键段落,最后与 logcat 时间点对齐。状态快照只能说明 “此刻如此”,根因要结合事件流与时间线。
常见误区
- “dumpsys 是日志”:是状态快照。
- “输出全看完才放心”:按段落提取更高效。
- “一次快照就能定位”:趋势与对照同样重要。
- “所有服务都有用”:先 -l 查清单,按需选。
延伸问题
- dumpsys 的
--proto输出与人类可读输出有什么不同? - 如何给自定义服务实现 dump()?
- 服务 dump 卡住时说明什么?
- 线上如何安全地获取 dumpsys 快照?
源码入口
| 文件 | 关键位置 | 作用 |
|---|---|---|
frameworks/native/services/dumpsys/ | 主程序 | 服务转发 |
各服务 dump() | 状态输出 | 内容来源 |
ActivityManagerService.java | dump | 进程状态 |
WindowManagerService.java | dump | 窗口状态 |
公共路径:frameworks/native/services/dumpsys/ 与 frameworks/base/services/core/java/com/android/server/。行号以 r75 检索为准。
需要复现、控制或查询设备时,见 adb 命令族。