“卡死”问题的治理

问题描述

  • Android 客户端卡死定义:

    • 启动卡死:App 启动时主线程在 5 秒内未执行完一个方法。

    • ANR 卡死:系统 ANR(Application Not Responding)卡死。

  • mPaaS 日志标识:

    • FRAME_CLIENT_STARTUP_DEAD:表示该条日志为“启动卡死”类型。

    • APM_ANR:表示该条日志为“ANR 卡死”类型。

    • threadsTrace:卡死时,所有的线程堆栈。

    • internalStack:卡死时,mPaaS 框架自身的工作线程堆栈。

“卡死”问题治理原则

导致“卡死”的原因非常多,基本的原因类型包括:读写权限问题、网络等待、线程死锁。“卡死”问题可能由一些偶发因素导致,有些和代码逻辑相关,有些和系统逻辑相关。

对于“卡死”问题的基本处理原则包括:

  • 重点关注影响面相对较大,覆盖的用户和机型比较多的卡死日志;

  • 具体问题的分析结果需要结合本地问题的复现来确认问题和验证解决方案;

  • 对于偶发、低频的卡死事件允许有一定的容忍度;

  • 需要长期追踪“卡死”问题的发生率,包括针对不同类别卡死问题的受影响用户数、“卡死”次数和人均“卡死”次数等指标。

说明

“卡死”日志相当于对问题现场的一张静态快照,并不能完整反应问题发生的全程。在问题分析中,有时并不能根据现场状况直接指认出根本原因。