记录一次完整ANR日志及分析
问题概述
- 应用包名:com.wangyou.app
- 发生时间:2025-03-19 11:22:53
- ANR类型:Input dispatching timed out
- 受影响Activity:MainActivity (com.wangyou.app/.mvvm.view.activity.MainActivity)
- 进程PID:32868
原始ANR日志完整内容
yaml
2025-03-19 11:22:53.045 286-348 ActivityManager system_server E ANR in com.wangyou.app (com.wangyou.app/.mvvm.view.activity.MainActivity)
PID: 32868
Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 5. Wait queue head age: 6338.4ms.)
Load: 46.51 / 49.14 / 48.63
CPU usage from 0ms to 6036ms later (2025-03-19 11:22:46.984 to 2025-03-19 11:22:53.020):
355% 64674/android.process.acore: 166% user + 188% kernel / faults: 59153 minor 3678 major
50% 286/system_server: 24% user + 26% kernel / faults: 21855 minor 601 major
45% 32868/com.wangyou.app: 31% user + 13% kernel / faults: 46225 minor
10% 16459/com.wangyou.browser: 9.9% user + 0.1% kernel / faults: 18095 minor 3 major
7.7% 1700/com.wangyou.carecolauncher: 5.9% user + 1.8% kernel / faults: 810 minor 403 major
4.4% 98/surfaceflinger: 2.1% user + 2.3% kernel / faults: 1069 minor
3.9% 1113/com.android.systemui: 3.3% user + 0.6% kernel / faults: 2961 minor
2.3% 100/watchdogd: 0.1% user + 2.1% kernel / faults: 39111 minor
2.1% 46/logd: 0.1% user + 1.9% kernel / faults: 5 minor
1.6% 1653/com.wangyou.netserver: 1.1% user + 0.4% kernel / faults: 3638 minor 63 major
1.1% 1634/com.wangyou.cloudsmartvoice: 0.8% user + 0.3% kernel / faults: 854 minor
0.9% 1926/com.baidu.naviauto: 0.6% user + 0.3% kernel / faults: 315 minor 4 major
0.6% 137/logcat: 0.3% user + 0.3% kernel
0.6% 1246/com.wangyou.datatrackservice: 0.3% user + 0.3% kernel / faults: 747 minor
0.6% 1288/com.android.phone: 0.4% user + 0.1% kernel / faults: 691 minor
0.6% 14019/app_process: 0.1% user + 0.4% kernel / faults: 45 minor
0.3% 47/servicemanager: 0% user + 0.3% kernel / faults: 1 minor
0% 48/hwservicemanager: 0% user + 0% kernel / faults: 76 minor
0.3% 77/netd: 0% user + 0.3% kernel / faults: 163 minor
0.3% 102/cameraserver: 0.1% user + 0.1% kernel / faults: 64 minor
0.3% 1265/com.wangyou.datatrackclient: 0.3% user + 0% kernel / faults: 727 minor
0.3% 14005/logcat: 0% user + 0.3% kernel
0.3% 27965/com.wangyou.settings: 0.3% user + 0% kernel / faults: 169 minor 2 major
0.3% 30982/com.autonavi.minimap: 0.1% user + 0.1% kernel / faults: 69 minor
0.3% 62658/logcat: 0.1% user + 0.1% kernel
0.1% 1//init: 0% user + 0.1% kernel / faults: 154 minor
0.1% 78/zygote64: 0% user + 0.1% kernel / faults: 313 minor
0% 112/media.extractor: 0% user + 0% kernel / faults: 20 minor
0% 126/tombstoned: 0% user + 0% kernel / faults: 13 minor
0.1% 1106/sdcard: 0% user + 0.1% kernel / faults: 13 minor
0.1% 5314/com.autonavi.amapauto:push: 0.1% user + 0% kernel
0.1% 14064/process-tracker: 0% user + 0.1% kernel
0.1% 14066/process-tracker: 0% user + 0.1% kernel
0.1% 30640/com.netease.cloudmusic.iot: 0% user + 0.1% kernel / faults: 25 minor
0.1% 62664/process-tracker: 0% user + 0.1% kernel
+0% 65098/audioserver: 0% user + 0% kernel
+0% 65100/CloudAppEngine: 0% user + 0% kernel
+0% 65137/com.android.cloudappiotdb: 0% user + 0% kernel
+0% 65176/com.android.cloudapp: 0% user + 0% kernel
+0% 65244/media.codec: 0% user + 0% kernel
+0% 65324/ping: 0% user + 0% kernel
9.8% TOTAL: 9.4% user + 0.3% kernel
CPU usage from 30ms to 302ms later (2025-03-19 11:22:47.014 to 2025-03-19 11:22:47.285):
373% 64674/android.process.acore: 184% user + 188% kernel / faults: 2543 minor 138 major
55% 64736/Binder:64674_C: 30% user + 25% kernel
55% 64931/Binder:64674_14: 34% user + 21% kernel
55% 64948/Binder:64674_1E: 21% user + 34% kernel
51% 64933/Binder:64674_16: 30% user + 21% kernel
51% 64940/Binder:64674_1C: 30% user + 21% kernel
47% 64939/Binder:64674_1B: 12% user + 34% kernel
42% 64928/Binder:64674_11: 17% user + 25% kernel
8.5% 64684/HeapTaskDaemon: 8.5% user + 0% kernel
68% 286/system_server: 17% user + 50% kernel / faults: 576 minor
28% 348/ActivityManager: 7.1% user + 21% kernel
7.1% 65008/Binder:286_95B: 0% user + 7.1% kernel
3.5% 64877/Binder:286_952: 0% user + 3.5% kernel
3.5% 64878/Binder:286_953: 0% user +
ANR直接原因
日志显示ANR的直接原因是:
Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 5. Wait queue head age: 6338.4ms.)
关键信息解读:
- 主线程阻塞:UI线程未能及时处理输入事件(超过500ms未响应)。
- 事件堆积 :输入事件队列中有5个事件在等待,最旧的事件已等待6338.4ms(远超ANR阈值5s)。
- 系统判定:由于主线程长时间未响应,系统触发ANR。
系统负载分析
1. CPU负载情况
- 系统平均负载 :
46.51 / 49.14 / 48.63
(1分钟/5分钟/15分钟),表明系统整体负载极高。 - 关键进程CPU占用 :
android.process.acore
:355% (166%用户态 + 188%内核态)- 可能是联系人/数据同步服务异常,占用了大量CPU资源。
system_server
:50% (24%用户态 + 26%内核态)- 系统服务繁忙,可能加剧了ANR。
com.wangyou.app
:45% (31%用户态 + 13%内核态)- 主线程可能正在执行耗时操作或陷入死锁。
2. 内存与缺页中断(Faults)
com.wangyou.app
触发了 46,225次minor faults,表明频繁的内存分配/回收,可能引发GC卡顿。android.process.acore
和system_server
也有大量缺页中断,说明系统内存压力较大。
根因推测
可能的主线程阻塞场景
- 耗时操作运行在主线程
- 如数据库查询、文件IO、网络请求、复杂计算等。
- 死锁或锁竞争
- 主线程等待某个锁,而该锁被其他线程长期持有。
- 过度频繁的UI更新
- 例如在RecyclerView中频繁刷新数据,或执行冗余的布局计算。
- 系统资源争抢
android.process.acore
占用了大量CPU,导致应用线程调度延迟。
解决方案建议
1. 主线程优化
- 使用异步任务 :将耗时操作移至子线程(如
Kotlin协程
、RxJava
、AsyncTask
)。 - 检查锁的使用 :避免在主线程中调用
synchronized
或Lock
,尤其是跨线程锁。 - 减少UI线程负担 :优化RecyclerView的Adapter、避免频繁调用
notifyDataSetChanged
。
2. 内存与GC优化
- 避免内存泄漏:检查Activity/Fragment是否被意外持有(如静态引用、Handler泄漏)。
- 优化数据结构 :减少临时对象创建,使用对象池(如
RecyclerView.ViewHolder
复用)。
3. 监控系统资源
- 排查高CPU进程 :
android.process.acore
异常占用需进一步分析(是否同步任务卡死?)。 - 使用性能工具 :
- Systrace:定位主线程卡顿点。
- Android Profiler:监控CPU、内存、网络使用情况。
4. 获取更多日志
-
提取ANR traces :
bashadb pull /data/anr/traces.txt
分析主线程堆栈,定位阻塞点。
总结
本次ANR是典型的主线程阻塞问题,诱因可能是:
- 应用自身在主线程执行了耗时操作。
- 系统整体负载过高(
android.process.acore
异常占用CPU)。 - 内存压力导致GC频繁,加剧卡顿。
下一步行动:
- 检查
MainActivity
中是否有同步IO或复杂计算。 - 分析
traces.txt
确认主线程堆栈。 - 优化后台服务(如
android.process.acore
)的资源占用。