问题现象
某Android车机项目在测试阶段发现一个偶现的严重卡顿问题:
复现步骤:
打开驾驶辅助(APA)界面
点击Home键回到桌面
实际结果: 出现严重卡顿,系统无响应数秒后才返回桌面
期望结果: 流畅返回桌面
发生概率: 约10%(偶现问题,增加了排查难度)

问题现象:点击Home键后系统无响应
这类偶现的性能问题是车机开发中最令人头疼的,因为:
❌ 难以稳定复现
❌ 日志信息分散
❌ 涉及多个模块,定位困难
❌ 影响用户体验,优先级高
接下来,让我们看看工程团队是如何抽丝剥茧,找到问题根因的。
排查思路:分层递进分析
面对这类性能问题,不能盲目猜测。我们的排查策略是:从整体到局部,从现象到本质,逐层排除。
排查链路:
整机性能分析 (CPU/内存)
↓ 排除
应用层分析 (APA应用)
↓ 排除
Framework层分析 (Binder机制)
↓ 发现异常
SystemUI分析 (资源泄漏)
↓ 定位根因
第一轮:整机性能分析
排查目标
首先要确认:是不是整机资源不足导致的卡顿?
常见的整机性能瓶颈有:
CPU占用过高(如某个进程CPU占用持续大于80%)
内存不足(触发LowMemoryKiller)
IO阻塞(存储设备读写慢)
GPU过载(渲染压力大)
这部分介绍可以参考我的另一篇文章: 车载 Android 系统稳定性问题全解析:从性能到黑屏的排查指南
分析方法
通过日志查看问题发生时刻的系统资源状况:
# 查看CPU占用
adb shell top -n 1 -d 1
# 查看内存使用
adb shell dumpsys meminfo
# 查看系统负载
adb shell cat /proc/loadavg
分析结果
问题时间点:2024-12-23 16:08:43
CPU占用情况:
=== 20251222_04-08-10-024 ===
Tasks: 505 total, 4 running, 501 sleeping, 0 stopped, 0 zombie
Mem: 17726M total, 17156M used, 569M free, 363M buffers
Swap: 8191M total, 28M used, 8163M free, 5157M cached
800%cpu 281%user 32%nice 245%sys 223%idle 0%iow 10%irq 10%sirq 0%host
PID USER PR NI VIRT RES SHR S[%CPU] %MEM TIME+ ARGS
2185 system 16 -4 19G 464M 346M S 48.3 2.6 9:36.38 system_server
315 logd 30 10 11G 28M 3.5M S 45.1 0.1 11:59.89 logd
27100 system 20 0 10G 3.2M 2.6M R 41.9 0.0 5:18.83 logcat -T 1970-01-01 08:00:00.000 --regex=ESAL:
659 system -3 -8 11G 158M 118M S 41.9 0.8 12:20.44 surfaceflinger
14380 u12_system 20 0 19G 779M 151M S 29.0 4.3 9:38.63 com.aispeech.lyra.daemon
内存使用情况:
Tasks: 505 total, 4 running, 501 sleeping
CPU: 800%cpu 281%user 32%nice 245%sys 223%idle 0%iow 10%irq 10%sirq
实际使用率: 577% / 800% = 72.1%,空闲率: 27.9%
内存详细信息:
MemTotal: 18151676 kB (17.3GB)
MemFree: 589448 kB (575MB) ← 物理空闲内存(低是正常的)
MemAvailable: 5944052 kB (5.8GB) ← 真正可用内存(充足!)
Buffers: 371900 kB (363MB)
Cached: 5278232 kB (5.0GB) ← 可释放的缓存
可回收内存 = Buffers + Cached = 363MB + 5.0GB = 5.4GB
Active: 6978000 kB (6.6GB)
Inactive: 4606148 kB (4.4GB)
Active(anon): 5351652 kB (5.1GB) ← 活跃的匿名页
Inactive(anon): 771068 kB (753MB)
AnonPages: 6077572 kB (5.8GB) ← 总匿名页(应用内存)
Mapped: 3791008 kB (3.6GB)
Shmem: 46172 kB (45MB)
Swap:
SwapTotal: 8388604 kB (8.0GB)
SwapFree: 8359188 kB (8.16GB)
Swap使用: 29416 kB (28MB) ← 仅0.34%,很低
CMA:
CmaTotal: 311296 kB (304MB)
CmaFree: 83276 kB (81MB)
CMA使用率: 73%
Top CPU进程:
| 进程 | CPU | 内存 | 说明 |
|---|---|---|---|
| system_server | 48.3% | 464M (2.6%) | Android核心服务 |
| logd | 45.1% | 28M (0.1%) | 日志守护进程 |
| logcat | 41.9% | 3.2M | 日志过滤进程 |
| surfaceflinger | 41.9% | 158M (0.8%) | 图形合成 |
| com.speech.daemon | 29.0% | 779M (4.3%) | 语音识别服务 |
| com.android.dvr | 16.1% | 367M (2.0%) | 行车记录仪 |
| com.android.avm_app | 16.1% | 668M (3.7%) | 全景影像 |
✅ 内存状态重新评估:
✅ MemAvailable 5.8GB 充足 – 可用内存占总内存的32%
✅ Cached 5.0GB – 大量可释放缓存
✅ Swap使用极低 – 仅28MB (0.34%),说明没有严重内存压力
⚠️ 应用内存占用偏高 – 语音服务779MB,但不构成系统性风险
🔴 CPU和日志问题:
🔴 日志系统CPU过载: logd (45.1%) + logcat (41.9%) = 87% CPU
🔴 CPU负载较高: 72.1%使用率,空闲仅27.9%
虽然CPU使用比较多,但是并未达到占满的情况,排除整机性能问题,问题在软件层面。
第二轮:APA应用分析
排查目标
既然整机性能正常,那是不是APA应用本身的退出逻辑有问题?
关键时间线
通过日志追踪关键事件的时间戳:
| 时间 | 事件 | 说明 |
|---|---|---|
| 16:08:43.120 | Home键按下 | 用户操作触发 |
| 16:08:54.350 | APA.onPause() | APA生命周期回调 |
| 16:08:55.200 | 桌面显示 | 用户可见桌面 |
核心发现:从Home键按下到onPause调用,耗时11秒!
12-22 04:08:43.183 15236 15236 I wm_on_paused_called: [17785643,com.android.ui.home.HomeActivity,performPause]
4819
12-22 04:08:43.183 15236 15236 I Instrumentation: Activity onPause End Activity: com.android.ui.home.HomeActivity@598dc2
12-22 04