智能客服
你问我答,随时在线为你解决问题
应用在运行过程中发生的非预期终止或无响应行为,是影响用户体验的核心痛点。主要表现为以下三种形式:
定位稳定性问题,需要结合系统底层记录的“死亡现场”关键信息。主要依赖两类日志:
系统终止进程时,会抛出不同的 reason,对应的故障类型及场景如下表所示:
1. 代码崩溃类
对应日志前缀:jscrash- / cppcrash-。
退出 Reason | 故障归因 | 场景深度解析 |
|---|---|---|
JsCrash | JS/ArkTS 崩溃 | 业务代码抛出未捕获异常(如空指针、类型错误、语法错误、OOMError)。 |
CppCrash | Native 崩溃 | C/C++ 层发生非法内存访问(SIGSEGV)、断言失败(SIGABRT)或系统库异常。 |
2. 应用无响应类
对应日志前缀:appfreeze-。
退出 Reason | 故障归因 | 场景深度解析 |
|---|---|---|
THREAD_BLOCK_6S | 主线程卡死 | 主线程被锁阻塞、死循环或业务逻辑耗时过长,导致看门狗超时。 |
APP_INPUT_BLOCK | 输入阻塞 | 用户点击/滑动屏幕后,主线程超过 6s 未分发处理事件。 |
LIFECYCLE_TIMEOUT | 生命周期超时 | onCreate/onForeground 等生命周期回调执行耗时过长(通常 >3-5s)。 |
3. 资源泄漏类
对应日志:HiLog 或 resource_leak。
退出 Reason | 故障归因 | 场景深度解析 |
|---|---|---|
ResourceLeak:Fd Leak The number of fd exceeds... | 句柄泄漏 | 打开的文件、Socket、Handler 未关闭,耗尽系统 FD 资源(通常 >1024)。 |
ResourceLeak:Thread Leak | 线程泄漏 | 线程只创建不销毁,数量爆炸导致 OOM 或 pthread_create 失败。 |
ResourceLeak:Ion Leak | 图形内存泄漏 | Native 层 ION 内存(DMA/图形缓冲区)申请后未释放。 |
ResourceLeak:Ashmem Leak | 共享内存泄漏 | 匿名共享内存(Ashmem)耗尽,常见于跨进程大数据传输未释放。 |
RENDER_MEMORY_OVER_ERROR | 渲染内存超限 | RenderService 检测到应用占用渲染内存过大,强制管控。 |
ResourceLeak:Pss Soft Kill | 内存软限超标 | 后台/低优先级清理:应用处于后台或非用户感知状态时,PSS 内存超过系统设定的“软阈值”(水位线),系统为预防 OOM 主动回收该进程。 |
ResourceLeak:Pss Kill | 内存硬限超标 | 单进程内存过大:应用 PSS 内存持续增长,超过系统允许的单进程最大硬阈值(即使系统总内存充足),通常指示应用存在严重的堆内存泄漏。 |
4. 内存与系统管控类
对应日志:HiLog。
退出 Reason | 故障归因 | 场景深度解析 |
|---|---|---|
LowMemoryKill | 系统低内存 | 整机内存不足,系统按优先级回收后台应用(标准 LMK)。 |
SWAP_FULL | 虚拟内存耗尽 | 系统交换分区(Swap)已满,系统被迫杀进程释放空间。 |
StabilityCheckKill | 稳定性检测 | 系统检测到进程频发崩溃或状态异常,进行保护性管控。 |
CPU Highload | CPU 高负载 | 应用在后台长时间高占用 CPU(如死循环),发热严重被管控。 |
Power Save Clean | 省电清理 | 超级省电模式或灭屏后,系统清理后台高耗电应用。 |
5. 后台与冻结管控类
*对应日志:HiLog *。
退出 Reason | 故障归因 | 场景深度解析 |
|---|---|---|
ContinuouslyWakeupAbnormal | 异常唤醒 | 应用在后台频繁设置 Alarm 或持有锁,导致系统无法休眠,冻结失败后强杀。 |
ILLEGAL_AUDIO_RENDERER... | 异常音频 | 应用后台挂起后仍试图播放音频,且未申请长时任务。 |
ILLEGAL_AUDIO_CAPTURER... | 异常录音 | 应用后台挂起后仍试图占用麦克风,触发隐私/功耗管控。 |
6. 正常退出与用户行为
非故障类,属于预期内行为。
退出 Reason | 归因分类 | 场景深度解析 |
|---|---|---|
KillApplicationSelf | 应用自杀 | 代码主动调用 terminateSelf 或 System.exit。 |
User Request / Clear Session | 用户杀进程 | 用户在最近任务列表中划掉应用,或强制停止。 |
UpgradeApp / UninstallApp | 安装卸载 | 应用更新或卸载导致的进程终止。 |

定位的核心逻辑遵循标准化路径:“锁定时间点 → 识别退出原因 → 提取详细堆栈 → 针对性修复”。
第一步:锁定崩溃现场 (HiLog 分析)
当问题复现时,通过系统实时日志找到“死亡 Reason”是定界的第一步。
PROCESS_KILL.*你的包名
(注:.* 用于匹配进程ID等中间字符,精准定位针对目标包名的杀进程动作)
第二步:获取故障堆栈 (FaultLog 提取)
根据上一步获取的 reason,导出系统生成的堆栈文件进行深度分析。
基于 PROCESS_KILL 日志中的 reason 字段,可将问题快速定界为以下几类:
根据导出的 FaultLog 文件及定界结果,针对典型场景的修复策略如下:
场景 1:Reason 为 JsCrash
场景 2:Reason 为 CppCrash
场景 3:Reason 为 APP_INPUT_BLOCK / THREAD_BLOCK_6S
场景 4:Reason 为 LIFECYCLE_TIMEOUT