Files

114 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2026-11-05 14:35:04 +08:00
# 车机系统 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 |