记录一次完整ANR日志及分析

记录一次完整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.)

关键信息解读

  1. 主线程阻塞:UI线程未能及时处理输入事件(超过500ms未响应)。
  2. 事件堆积 :输入事件队列中有5个事件在等待,最旧的事件已等待6338.4ms(远超ANR阈值5s)。
  3. 系统判定:由于主线程长时间未响应,系统触发ANR。

系统负载分析

1. CPU负载情况

  • 系统平均负载46.51 / 49.14 / 48.63(1分钟/5分钟/15分钟),表明系统整体负载极高。
  • 关键进程CPU占用
    • android.process.acore355% (166%用户态 + 188%内核态)
      • 可能是联系人/数据同步服务异常,占用了大量CPU资源。
    • system_server50% (24%用户态 + 26%内核态)
      • 系统服务繁忙,可能加剧了ANR。
    • com.wangyou.app45% (31%用户态 + 13%内核态)
      • 主线程可能正在执行耗时操作或陷入死锁。

2. 内存与缺页中断(Faults)

  • com.wangyou.app 触发了 46,225次minor faults,表明频繁的内存分配/回收,可能引发GC卡顿。
  • android.process.acoresystem_server 也有大量缺页中断,说明系统内存压力较大。

根因推测

可能的主线程阻塞场景

  1. 耗时操作运行在主线程
    • 如数据库查询、文件IO、网络请求、复杂计算等。
  2. 死锁或锁竞争
    • 主线程等待某个锁,而该锁被其他线程长期持有。
  3. 过度频繁的UI更新
    • 例如在RecyclerView中频繁刷新数据,或执行冗余的布局计算。
  4. 系统资源争抢
    • android.process.acore 占用了大量CPU,导致应用线程调度延迟。

解决方案建议

1. 主线程优化

  • 使用异步任务 :将耗时操作移至子线程(如Kotlin协程RxJavaAsyncTask)。
  • 检查锁的使用 :避免在主线程中调用synchronizedLock,尤其是跨线程锁。
  • 减少UI线程负担 :优化RecyclerView的Adapter、避免频繁调用notifyDataSetChanged

2. 内存与GC优化

  • 避免内存泄漏:检查Activity/Fragment是否被意外持有(如静态引用、Handler泄漏)。
  • 优化数据结构 :减少临时对象创建,使用对象池(如RecyclerView.ViewHolder复用)。

3. 监控系统资源

  • 排查高CPU进程android.process.acore异常占用需进一步分析(是否同步任务卡死?)。
  • 使用性能工具
    • Systrace:定位主线程卡顿点。
    • Android Profiler:监控CPU、内存、网络使用情况。

4. 获取更多日志

  • 提取ANR traces

    bash 复制代码
    adb pull /data/anr/traces.txt

    分析主线程堆栈,定位阻塞点。


总结

本次ANR是典型的主线程阻塞问题,诱因可能是:

  1. 应用自身在主线程执行了耗时操作。
  2. 系统整体负载过高(android.process.acore异常占用CPU)。
  3. 内存压力导致GC频繁,加剧卡顿。

下一步行动

  • 检查MainActivity中是否有同步IO或复杂计算。
  • 分析traces.txt确认主线程堆栈。
  • 优化后台服务(如android.process.acore)的资源占用。
相关推荐
tracyZhang1 小时前
NativeAllocationRegistry----通过绑定Java对象辅助回收native对象内存的机制
android
vv啊vv1 小时前
使用android studio 开发app笔记
android·笔记·android studio
冯浩(grow up)2 小时前
使用vs code终端访问mysql报错解决
android·数据库·mysql
_一条咸鱼_5 小时前
Android Fresco 框架工具与测试模块源码深度剖析(五)
android
QING6185 小时前
Android Jetpack Security 使用入门指南
android·安全·android jetpack
顾林海5 小时前
Jetpack LiveData 使用与原理解析
android·android jetpack
七郎的小院5 小时前
性能优化ANR系列之-BroadCastReceiver ANR原理
android·性能优化·客户端
QING6185 小时前
Android Jetpack WorkManager 详解
android·kotlin·android jetpack
今阳6 小时前
鸿蒙开发笔记-14-应用上下文Context
android·华为·harmonyos
东莞梦幻科技7 小时前
体育直播系统趣猜功能开发技术实现方案
android