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

115 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 车机系统 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 合理 |
---
## 附录:关键证据命令(可复现)
```bash
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 |