Files
Obsidian/项目文档/徐工/语音/车机系统监控问题报告_20260905.md
T
2026-11-05 14:35:04 +08:00

4.6 KiB
Raw Blame History

车机系统 CPU / 内存监控问题报告

日期: 2026-09-05 设备: T9999916 · Android 10 · 6核(600%) · RAM 6.1G + swap 2.4G 监控窗口: 10:10 – 11:07(约 57 分钟,10 秒采样,持续报文压测中) 监控方式: top 10s 轮询 + dumpsys meminfo + 线程级 top -H + /proc 快照


结论总览

等级 进程 问题 证据强度
🔴 P0 com.txzing.voiceassistant (PID 4733) Native 层内存泄漏 + 持续高 CPU 确凿
🟡 P1 com.yaxon.fota (PID 5037) 常驻高 CPU(升级服务压测下异常) 高
🟡 P2 com.yaxon.dms (PID 5056) CPU 波动大(可能为正常视觉推理负载) 中
⚪ 观察 system_server / systemui / surfaceflinger / logd / logcollector 二级负载,随报文流量波动 信息

🔴 P0: com.txzing.voiceassistant — Native 内存泄漏(核心发现)

内存增长曲线(RSS)

  • 10:10 起始 ~562MB → 10:45 ~730MB → 11:00 ~770MB → 11:07 停止监控时 754MB(峰值 793MB)
  • 约 57 分钟增长 ~200MB(+35%),锯齿形单调上行,无平台期,无回落,未观察到 GC 释放
  • 全局 MemAvailable 同步从 ~1.98G 降至 ~1.70–1.77G,与该进程泄漏吻合

泄漏定位在 Native 层(非 Java)

停止监控前最终 dumpsys meminfo 快照:

                   Pss    Private   Heap
                 Total    Dirty     Alloc
 Native Heap   378885    378784    378358   ← 泄漏主体
 Dalvik Heap   113174    113112    100795
 TOTAL PSS:    704888    (Views: 9837, ViewRootImpl: 29)
  • Native Heap: 378MB(Heap Alloc 378.4MB / Size 386MB,已接近上限)
  • Java Heap: 仅 113MB — 若是 Java 泄漏 GC/lmkd 可回收,Native 才解释 RSS 单调涨
  • Views: 9837 个 / ViewRootImpl: 29(UI 对象也在累积,但量级远小于 native heap)

CPU 与热点线程(共 104 线程)

TID 4942  MDS_SERVER   R  94.5%  累计 57:31.58   ← 热点
TID 5018  RenderThread S   2.7%   累计  3:36.31
TID 4962  engine_proc  S   2.7%   累计  1:21.77
  • 进程 CPU 常驻 90–140%,峰值 193%
  • 热点线程 TID 4942 = MDS_SERVER:单线程 94.5%,57 分钟内累计 57 分 31 秒 CPU 时间 —— 几乎吃满一个核,处于报文/流处理路径;内存与 CPU 异常同源

判断

MDS_SERVER(native 报文/数据服务线程)存在分配未释放(缓冲区/会话对象累积),同时该路径处理消耗持续 CPU。按当前 ~3.5MB/min 速率,连续运行数小时将逼近 Native Heap 上限并触发 OOM/崩溃。

建议动作

  1. debuggerd -j 4733 抓 MDS_SERVER 调用栈,确认其在忙什么系统调用/库
  2. 对比"停止发报文"前后 RSS 斜率,闭环验证报文触发
  3. native 内存定位:adb shell setprop wrap.com.txzing.voiceassistant "LIBC_MALLOC_DEBUG=1" 后复测
  4. 交 txzing 语音助手团队:重点审 MDS_SERVER 线程的报文缓冲生命周期

🟡 P1: com.yaxon.fota — 常驻高 CPU

  • 全程 40–90% CPU(峰值 100%),RSS 稳定 ~141MB(无内存问题)
  • 升级服务在报文压测下持续高 CPU 不正常——怀疑频繁解析/重试报文或轮询过密。建议查其日志与轮询策略

🟡 P2: com.yaxon.dms

  • CPU 7–91% 波动,RSS 稳定 ~158MB。若 DMS 在做视觉推理属正常负载,峰值偏高,建议确认

⚪ 二级负载(未见泄漏,供参考)

进程 CPU 范围 备注
system_server 20–91% 突发 随报文/窗口活动波动
com.android.systemui 17–64% 正常偏高
surfaceflinger 20–47% 渲染负载
logd 峰值 77% 日志量随报文增大
logcollector 突发 116% 周期性日志收集
com.yaxon.datacenter_service 14–57% 疑似报文接收方,CPU 合理

附录:关键证据命令(可复现)

adb shell dumpsys meminfo com.txzing.voiceassistant   # Native 378MB vs Java 113MB
adb shell top -H -b -n 1 -q -p 4733                   # MDS_SERVER 94.5% / 57m31s
adb shell cat /proc/4733/task/4942/comm               # → MDS_SERVER
adb shell ls /proc/4733/task | wc -l                  # → 104 线程
adb shell dumpsys meminfo -c                          # 全进程 PSS 排名

全进程 PSS Top(11:07 快照)

进程 PID PSS (KB)
com.txzing.voiceassistant 4733 693,609
system 3288 120,731
com.yaxon.dms 5056 90,670
com.yaxon.music 4806 53,318
com.yaxon.factory 5074 38,285
com.yaxon.voice 4677 36,104
com.yaxon.logcat 5031 32,314
com.yaxon.bluetooth 4721 33,078