APR稳定性标注


# APR稳定性标注

## 日志说明

```css
## dropbox    tombstone记录位置
## dumpsys_SF
## eventinfo.hvw
## log_events 
## log_kmsg  内核日志
## log_main  应用日志
## log_raio  音频日志

核心应用

com.h.camera
com.h.contacts
com.h.android.launcher
com.android.phone
com.android.systemui

负责模块

ANR
Android Vmreboot
tombstone
crash 

Modem Crash
Vm Watchdog
Non-preloaded ANR

可剔除项

ANR

## NativePollOnce  
主线程卡在nativePollOnce的情况非常常见,可以直接标注日志无效。
原因如下:
1.该ANR是CPU抢占或内存紧张等其他因素引起
2.这份ANR日志抓取的时候,主线程已经恢复正常
## applog日志中,搜索 BlockMonitor
如果binder调用超过5s,则写系统卡顿,可剔除,将相应的log放在上面
 ## main线程 Runnable 状态,其他binder线程无阻塞,未打印binder transaction信息,log无其他异常信息  在打印dumpstack时候就不卡顿了,只是瞬时堆栈打印,从上传log看暂无风险,可剔除
# 901004001	黑屏	Black Screen                                        ## 【【user_type为空的不用标
# 901004003	服务卡死	Service Die                                 ##【【 rpc问题 H回复不关注,可剔除

剔除模板

# 研发测试代码引入
-----------------------------------------------------------------------------
## 均为单机高频,moneky挂测场景,可剔除
## 用户无感知,media service挂掉,非模块问题,可剔除
## 测试场景,非用户场景,可剔除
## 单机高频,res资源加载,非用户场景,可剔除 --- Android.content.res.ResourcesImpl.loadDrawable
## 后台anr,高频点击apk场景,整机状态较差,加载慢,非模块问题,后台用户影响小,可剔除
## 均为后台anr,monkey场景,多为高cpu场景,用户无感知,可剔除
## dropbox并未收集到异常堆栈,eventlog中未发现am_crash,log中没发现crash信息,无log无法继续分析
## 在eventlog并未搜到am_crash信息,系统并没有收集到crash信息,非系统问题,三方crash问题未打印dropbox
## RuntimeException SecurityException 超时类权限问题,非用户场景,可剔除
## RuntimeException 超时类异常,monkey场景,可剔除
## 系统压力过大导致无法及时响应进程的操作,可剔除。

# log无效,无法定位
-----------------------------------------------------------------------------
## nativePollOnce 类型,无main线程具体堆栈信息,原生机制无法继续分析,可剔除	
## 非核心应用 ,仅一次,影响小,可剔除
## monkey场景,仅一次,影响小,可剔除
## 空堆栈,结合hilog无法继续分析,影响小,可剔除 

# 预制第三方APK,无代码
-------------------------------------------------------------------------------
## AlipayGphone 支付宝rpc问题,可剔除
## systemhelper 联通定制apk问题,可剔除 ---  com.mobiletools.systemhelper

故障说明

/data/anr/
/data/log/dropbox
	## 主要记录:Android系统进程及应用程序运行过程中,内核、系统进程用户进程等出现问题时的日志
	## 查询dropbox服务的信息:       adb shell dumpsys dropbox
/data/log/faultlog/freeze
/data/system/dropbox
/data/tombstones
	## 像墓碑一样主要记录:死亡的进程的基本信息(进程号,线程号),死亡的地址(在哪个地址发生了crash)、死亡时的现场是什么样的(一系列堆栈信息)

软件侧 watchDog
	## 接收系统内部reboot请求,重启系统
	## 监护system_server进程,防止系统死锁 

重启类故障

AndroidVmreboot

故障上报
VmReBoot本质上就是zytote重启,就是系统关键服务进程(System_server、SurfaceFlinger等)出现了Crash或者Tombstone,此时系统给就会重启虚拟机将系统还原成初始状态。
故障日志

故障现象
## 重启后机器可能会卡住几秒,然后出现从华为LOG界面从新加载,重启之后会回到锁屏界面提示重启需要重新输入密码。
## 手机突然重启
Vmreboot问题分析
问题思路
signal 7 (SIGBUS)  SIGBUS_BUS_ADRERR ----分配内存对齐问题
## 有明显的错误干扰可以归类与硬件问题
## 是第三方应用出现这类问题,有可能是应用本身申请的内存存在字节对齐问题。但是这个一般会有比较明显的backtrace来分析。

Watchdog

故障上报
由于SystemService内有一些重要service,所以进程中有一个软件实现的Watchdog机制,用于监视SystemSever中各Service是否正常工作。如果卡住超过一定时间(默认30s),就dump现场便于分析,在超时(默认60s)就重启SystemServer保证系统的可用性。

watchdog一个检测周期为30s,一次检测失败并不会立即重启,回再次检测,如果连续60s阻塞,才会进入到重启阶段,由于watchdog是由system server启动,是System Server 的子线程,因此会将整个system server进程退出
故障日志

故障现象
## 系统出现死机冻屏状态,上层用户无法正常操作系统UI
## 可能Input系统失效,回发生TP无法操作,按键无法响应。无法亮灭屏等。

Watchdog问题分析

报错类

Tombstone

故障上报
tombstone主要见于native层的出错,可以认为是native层的crash,有可能是应用自身的lib库报错,也有可能是framework层的报错(多见于各种servie),相对于crash,由于lib都是编译后的代码,出错信息无法直接对于代码,且不会像JAVA那样有分类相对比较明细的异常类型。
故障日志
常见原因
1.方位空指针
2.方位野指针(已经释放的指针)
3.重复释放
4.stack被破坏,数组越界
5.全局变量并发问题
故障现象
应用闪退
Tombstone问题分析
    • tombstone文件内容分析
    Build fingerprint: 'PTAC/PHB-AN00/LQ-FIO-BD00-Q:11/PTACFIO-BD00/102.0.1.188C11:user/release-keys'  ## 软件版本
    Revision: '0'
    ABI: 'arm64'
    Timestamp: 2023-01-06 13:35:10+0800    ## 问题时间点
    pid: 27113, tid: 27276, name: HwBinder:27113_  >>> /vendor/bin/hw/android.hardware.camera.provider@2.4-service_64 <<<  ## 出现问题进程
    uid: 1047
    ## 问题类型及原因
    signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x40   ### 错误类型ignal 11 (SIGSEGV), code 1,表示访问无效地址
    Cause: null pointer dereference ### 即为空指针引用
    ## CPU出错时寄存器的值
        x0  0000000000000000  x1  0000000000000000  x2  0000000000000000  x3  0000000000000006
        x4  b4000073890c92c0  x5  00000073b63bf530  x6  b4000073892bd880  x7  0000000000000000
        x8  000000739e1b5fb0  x9  0000000000000001  x10 0000000000004001  x11 0000000000000000
        x12 0000000000000200  x13 0000000000000580  x14 0000000000000000  x15 0000000000000040
        x16 00000073b63c0c80  x17 00000073b63b4780  x18 000000739d9c6000  x19 b4000073892bd898
        x20 000000739e1b5fb0  x21 0000000000000001  x22 b4000073892bd880  x23 0000000000000300
        x24 0000000000000000  x25 b4000073892bd880  x26 0000000000000200  x27 0000000000000002
        x28 0000000000000040  x29 000000739e1b5d10
        lr  00000073b6386308  sp  000000739e1b5d00  pc  00000073b63b4798  pst 0000000080001000
    ##  出错时的程序回溯
    backtrace:
          #00 pc 00000000002ef798  /vendor/lib64/hw/com.qti.chi.override.so (CHIBufferManager::GetImageBufferInfo()+24) 
          #01 pc 00000000002c1304  /vendor/lib64/hw/com.qti.chi.override.so(UsecaseMultiCamera::GenerateRealtimeRequest
          #02 pc 00000000002b0bd0  /vendor/lib64/hw/com.qti.chi.override.so (UsecaseMultiCamera::ExecuteCaptureRequest
          #03 pc 0000000000266090  /vendor/lib64/hw/com.qti.chi.override.so (Usecase::ProcessCaptureRequest
    ##  堆栈内容
        stack
           e5c7b108 e537b11c
     
       --------------------------------------------------------
    #1. 出错的进程号和线程号   pid: 27113, tid: 27276,   
    #2. 进程名  /vendor/bin/hw/android.hardware.camera.provider@2.4-service_64 
    #3. 报错类型和原因
        signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x40
        Cause: null pointer dereference
    #4. 出错时芯片内部寄存器的值
        x0  0000000000000000  x1  0000000000000000  x2  0000000000000000  x3  0000000000000006
        x4  b4000073890c92c0  x5  00000073b63bf530  x6  b4000073892bd880  x7  0000000000000000
    #5. 出错时的程序回溯,顺序为由下到上调用执行
        backtrace:
          #00 pc 00000000002ef798  /vendor/lib64/hw/com.qti.chi.override.so (CHIBufferManager::GetImageBufferInfo()+24) 
          #01 pc 00000000002c1304  /vendor/lib64/hw/com.qti.chi.override.so (UsecaseMultiCamera::GenerateRealtimeRequest(camera3_capture_request*, ChiMetadata*, int*)+21028) (BuildId: b30199ae2cfc0f4c0885a503b8877d99)
    #6. 堆栈内容
        stack
           e5c7b108 e537b11c
    
    
  1. tombstone分析方法

    1. 通过特定工具 addr2line

    2. backtrace 中的#00 内容无法解析,从#01开始
      通过  
       #01 pc 00000000002c1304  /vendor/lib64/hw/com.qti.chi.override.so(UsecaseMultiCamera::GenerateRealtimeRequest
      
      程序执行com.qti.chi.override.so中地址00000000002c1304内容,可据此定位出错的位置,将链接符号的com.qti.chi.override.so文件放入计算云,执行以下指令:
      addr2line -f -e com.qti.chi.override.so00000000002c1304
      
      就可以指导代码出错的位置
      

App_ANR

故障上报
是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。

Service Timeout:前台服务在20s内未执行完成; 后台服务200s
BroadcastQueue Timeout:前台广播在10s内未执行完成  后台广播60s
ContentProvider Timeout:内容提供者在publish过超时10s;
InputDispatching Timeout:输入事件分发超时5s,包括按键和触摸事件。
故障日志
常见原因
1:主线程频繁进行耗时的IO操作:如数据库读写
2:多线程操作的死锁,主线程被block;
3:主线程被Binder 对端block;
4:System Server中WatchDog出现ANR;
5:service binder的连接达到上线无法和和System Server通信
6:系统资源已耗尽(管道、CPU、IO)



故障现象
点击应用无响应,超过一定时间出现应用无响应弹框,提示是继续等待还是关闭应用
ANR问题分析
## 分析思路
首先我们搜索am_anr,找到出现ANR的时间点、进程PID、ANR类型、
然后再找搜索PID,找前5秒左右的日志。
过滤ANR IN 查看CPU信息,
接着查看traces.txt,找到java的堆栈信息定位代码位置,最后查看源码,分析与解决问题
 ## 分析思路
1>ANR类型:确认ANR是属于哪种类型,如果是input的ANR请务必注意它的ANR message信息
2>CPU占用:关注下top的cpu占用模块,可能是问题模块
3>Lowait:如果lowait较高,可以重点关注下是否是IO或者文件系统导致
4>堆栈:查看main线程调用栈,确认ANR栈类型,不同栈类型问题分析是由差异的
------1.等锁
------2.binder对端
------3.wait栈
------4.Java标准接口
------5.nativePollOnce
------6.No Focus Window
------7.没有栈
------8.其他
5>确认ANR时间范围(查看applocat,如果时间不对应,可以看log_main,确认ANR时间点、主线程日志、BlockMonitor卡顿监控)
------1.ANR时间点确认:(通过各种类型anr时间,我们可以确定anr发生的事件范围)
----------a.logcat里面搜索 “anr in”
----------b.log_event里面搜索 “anr”
------2.主线程问题时间段日志
----------a.主线程问题时间段一致在打log,需要怀疑是主线程任务过多导致(Message过多)
----------b.主线程log打印太少,需要怀疑是否是业务逻辑卡住了,或者主线程被冷冻或者处于D状态
6>BlockMonitor卡顿检测:(在logcat中搜索“BlockMonitor”)
----------a.Binder调度超时,重点看对端是谁。BlockMonitor对打印频率有限制,所以不用局限于问题时间点
----------b.单条Message处理事件过长,这种需确认Message的业务逻辑,通过查看代码找可疑点,例如System server卡顿也会导致多用用ANR
----------c.Message过多,查看top Message是什么以及产生的原因
7>线程状态:(查看kmsgcat-lo-确认线程是否是D状态,是否出现多个线程Block)
----------a.搜索卡住的线程是否被 hungtask 打印,hungtask发现D状态会主动触发打印
----------b.搜索 “ blocked ”,查看是否有多个线程被block

  1. Dropbox

    先看是什么ANR,CPU状态,IO状态,tid=1的main堆栈信息及blocked binder transactions信息。

    ANR信息决定你是什么类型ANR:点击事件无响应,service型,receiver型
    看CPU和IO状态,可以看出当前cpu,io状态
    看堆栈信息,可以先分析下是否是因为调用某个阻塞方法导致ANR
    查看blocked binder transactions信息可以分析是否某些binder导致自己阻塞或者耗尽问题。

    • 报错原因

      Process: com.android.settings  ## 发生ANR进程名
      PID: 18517
      UID: 1000
      Flags: 0x38c83e45   ##应用安装标记,包括是否是预置还是安装,PMS中
      Package: com.android.settings v11101256 (11.1.1.256)  ##发生ANR的包名,含应用的版本号
      SYSVMTYPE: Art
      APPVMTYPE: Art
      Foreground: Yes   ## 发生ANR是否是前台,是Yes
      Process-Runtime: 7611654
      Activity: com.android.settings/.HWSettings
      Subject: Input dispatching timed out (3f9272a com.android.settings/com.android.settings.HWSettings (server) is not responding. Waited 21390ms for MotionEvent(deviceId=-1, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (189.0, 1981.0)]), policyFlags=0x6b000000)
      
      ## Input dispatching timed out
      
      
      Process: com.android.settings
      PID: 18517
      UID: 1000
      Flags: 0x38c83e45
      Package: com.android.settings v11101256 (11.1.1.256)
      SYSVMTYPE: Art
      APPVMTYPE: Art
      Foreground: Yes
      Process-Runtime: 7611654
      Activity: com.android.settings/.HWSettings
      Subject: Input dispatching timed out (Waiting to send non-key event beacause the touched window has no finished processing certain input event s that were delicered to it. Waited 21390ms for MotionEvent(deviceId=-1, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, 
      ## Waiting to send non-key event 类型的ANR一般为处理Input事件超时导致的,点击屏幕或者虚拟按键,此时Activity需要响应事件,但是由于某些耗时导致未能及时响应,事件过久则会导致ANR
      
    • CPU使用情况

      CPU usage from 0ms to 23941ms later (2023-01-07 03:57:56.475 to 2023-01-07 03:58:20.416):
      76% 1413/system_server: 43% user + 33% kernel / faults: 42304 minor 3237 major
      32% 1814/hiview: 26% user + 5.5% kernel / faults: 8561 minor 251 major
      .........
      74% TOTAL: 35% user + 32% kernel + 2.6% iowait + 2.1% irq + 1.2% softirq
      ## CPU使用没有特别的情况
      
    • 主线程的堆栈信息(不同栈类型问题分析)

      -----------------------------------------------------------1等锁----------------------------------------------------------------------------------------
      ## 主线程被lock,等待超时(等锁)
      ----------------------------------------------------
      DALVIK THREADS:"main" 
      prio=5 tid=3 TIMED_WAIT  
      | group="main" sCount=1 dsCount=0 s=0 obj=0x400143a8  
      | sysTid=691 nice=0 sched=0/0 handle=-1091117924  
      at java.lang.Object.wait(Native Method)  
      - waiting on <0x1cd570> (a android.os.MessageQueue)  
      at java.lang.Object.wait(Object.java:195)  
      at android.os.MessageQueue.next(MessageQueue.java:144)  
      at android.os.Looper.loop(Looper.java:110)  
      at android.app.ActivityThread.main(ActivityThread.java:3742)  at java.lang.reflect.Method.invokeNative(Native Method)  
      at java.lang.reflect.Method.invoke(Method.java:515)  
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)  
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497)  at dalvik.system.NativeStart.main(Native Method)
      
      "Binder Thread #3" prio=5 tid=15 NATIVE  
      | group="main" sCount=1 dsCount=0 s=0 obj=0x434e7758  
      | sysTid=734 nice=0 sched=0/0 handle=1733632  at dalvik.system.NativeStart.run(Native Method)
      "Binder Thread #2" prio=5 tid=13 NATIVE  
      | group="main" sCount=1 dsCount=0 s=0 obj=0x1cd570  
      | sysTid=696 nice=0 sched=0/0 handle=1369840  at dalvik.system.NativeStart.run(Native Method)
      "Binder Thread #1" prio=5 tid=11 NATIVE  
      | group="main" sCount=1 dsCount=0 s=0 obj=0x433aca10  
      | sysTid=695 nice=0 sched=0/0 handle=1367448  at dalvik.system.NativeStart.run(Native Method)
      
      
      "main" prio=5 tid=1 Blocked
      | group="main" sCount=1 dsCount=0 flags=1 obj=0x73039dd0 self=0x75778c4a00
      | sysTid=1126 nice=-2 cgrp=default sched=0/0 handle=0x75fcfc89a8
      | state=S schedstat=( 2210936395528 825183440909 4610261 ) utm=154091 stm=67002 core=7 HZ=100
      | stack=0x7fecd18000-0x7fecd1a000 stackSize=8MB
      | held mutexes=at com.android.server.pm.PackageManagerService.isPackageSuspendedForUser(PackageManagerService.java:17700)
      - waiting to lock <0x0ca44263> (a android.util.ArrayMap) held by thread 189
      at com.android.server.AppOpsService.isPackageSuspendedForUser(AppOpsService.java:1011)
      at com.android.server.AppOpsService.checkAudioOperation(AppOpsService.java:989)
      at android.media.PlayerBase.updateAppOpsPlayAudio_sync(PlayerBase.java:265)
      at android.media.PlayerBase.updateAppOpsPlayAudio(PlayerBase.java:252)
      - locked <0x09bc9e60> (a java.lang.Object)at android.media.PlayerBase.-wrap0(PlayerBase.java:-1)
      at android.media.PlayerBase.-wrap0(PlayerBase.java:-1)
      
      

      -----------------------------------------------------------2Binder对端----------------------------------------------------------------------------------------

      ## 分析思路
      1.
      
      情况一:
        "main" prio=5 tid=1 Native
          | group="main" sCount=1 dsCount=0 flags=1 obj=0x72f7a3a8 self=0xb40000714cf1ec00
          | sysTid=18517 nice=-10 cgrp=vip sched=0/0 handle=0x714e5bc4f8
          | state=S schedstat=( 2220699119 806477516 3669 ) utm=151 stm=70 core=7 HZ=100
          | stack=0x7fe9cae000-0x7fe9cb0000 stackSize=8192KB
          | held mutexes=
          native: #00 pc 00000000000d8294  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
          native: #01 pc 0000000000094fb8  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+156)
          native: #02 pc 000000000005d2d4  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+296)
          native: #03 pc 000000000005e47c  /system/lib64/libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*)+60)
          native: #04 pc 000000000005e1b8  /system/lib64/libbinder.so (android::IPCThreadState::transact(int, unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+284)
          native: #05 pc 0000000000056014  /system/lib64/libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+72)
          native: #06 pc 000000000016b730  /system/lib64/libandroid_runtime.so (android_os_BinderProxy_transact(_JNIEnv*, _jobject*, int, _jobject*, _jobject*, int)+424)
          at android.os.BinderProxy.transactNative(Native method)
        at android.os.BinderProxy.transact(BinderProxy.java:576)
          at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3789)
          at android.app.Instrumentation.execStartActivity(Instrumentation.java:1749)
          at android.app.Activity.startActivityForResult(Activity.java:5523)
        ----------------------------------------------------------
         ## 堆栈中显示BinderProxy.transactNative 通常都是因为binder对端阻塞导致的ANR,通常情况下,把日志拉到最底部,可以看到binder transactions,就能找到对端进程,如果没有直接标日志不足
      
      binder数据量过大
      07-21 04:43:21.573  1000  1488 12756 E Binder  : Unreasonably large binder reply buffer: on android.content.pm.BaseParceledListSlice$1@770c74f calling 1 size 388568 (data: 1, 32, 7274595)
      07-21 04:43:21.573  1000  1488 12756 E Binder  : android.util.Log$TerribleFailure: Unreasonably large binder reply buffer: on android.content.pm.BaseParceledListSlice$1@770c74f calling 1 size 388568 (data: 1, 32, 7274595)
      07-21 04:43:21.607  1000  1488  2951 E Binder  : Unreasonably large binder reply buffer: on android.content.pm.BaseParceledListSlice$1@770c74f calling 1 size 211848 (data: 1, 23, 7274595)
      07-21 04:43:21.607  1000  1488  2951 E Binder  : android.util.Log$TerribleFailure: Unreasonably large binder reply buffer: on android.content.pm.BaseParceledListSlice$1@770c74f calling 1 size 211848 (data: 1, 23, 7274595)
      07-21 04:43:21.662  1000  1488  6258 E Binder  : Unreasonably large binder reply buffer: on android.content.pm.BaseParceledListSlice$1@770c74f calling 1 size 259300 (data: 1, 33, 7274595)
      
          
      binder通信失败
      07-21 06:04:35.580 <6>[32837.690321] binder: 1698:2362 transaction failed 29189/-3, size 100-0 line 3042
      07-21 06:04:35.594 <6>[32837.704042] binder: 1765:4071 transaction failed 29189/-3, size 76-0 line 3042
      07-21 06:04:35.899 <6>[32838.009132] binder: 1765:4067 transaction failed 29189/-3, size 224-8 line 3042
      07-21 06:04:36.018 <6>[32838.128903] binder: 1765:2397 transaction failed 29189/-22, size 348-0 line 2916
      
      
      binder线程池耗尽
      11-23 19:29:57.905 3505 9248 E IPCThreadState: binder thread pool (15 threads) starved for 1070 ms
      
      
      ----------------------------------------------------------5NativePollOnce----------------------------------------------------------------------------------------
      如果主线程是NativePollOnce(表示主线程处于空闲状态)
      --这种栈表示在去取/等待下一条消息
      --要么主线程不卡,要么没抓到栈,抓的时候正好在获取下一条消息
      
      定位方式:
      --1.检查BlockMonitor是否有日常打印(看Message是否打印过多或者处理事件是否过长)
      --2.分析systrace(通过抓取Systrace分析定位anr)
      --3.检查logcat进程中是否有其他异常(频繁GC等)
      
      "main" prio=5 tid=1 Native
        | group="main" sCount=1 dsCount=0 flags=1 obj=0x749a7338 self=0xb400007ea9fddc00
        | sysTid=30148 nice=0 cgrp=default sched=0/0 handle=0x7eab66a4f8
        | state=S schedstat=( 874415787547 97631065352 2451556 ) utm=62480 stm=24960 core=4 HZ=100
        | stack=0x7fe230d000-0x7fe230f000 stackSize=8192KB
        | held mutexes=
        native: #00 pc 00000000000d8c08  /apex/com.android.runtime/lib64/bionic/libc.so (__epoll_pwait+8)
        native: #01 pc 000000000001994c  /system/lib64/libutils.so (android::Looper::pollInner(int)+184)
        native: #02 pc 000000000001982c  /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112)
        native: #03 pc 0000000000155498  /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44)
        at android.os.MessageQueue.nativePollOnce(Native method)
        at android.os.MessageQueue.next(MessageQueue.java:374)
        at android.os.Looper.loop(Looper.java:185)
        at com.huawei.secure.android.common.activity.protect.ActivityProtect.i(SourceFile:9)
        at com.huawei.secure.android.common.activity.protect.ActivityProtect.b(SourceFile:2)
        at com.huawei.secure.android.common.activity.protect.ActivityProtect$a.uncaughtException(SourceFile:8)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
        at java.lang.Thread.dispatchUncaughtException(Thread.java:2214)
      
      

    ----------------------------------------------------------6No Focus Window----------------------------------------------------------------------------------------

    ## 原因分析:
    Nofocus Window 的anr大多数情况都并非是主线程卡顿,栈表现基本为NativePollOnce。
    实际问题是Window状态异常。
    Input事件发给具体的应用,首先就需要找到当前的焦点窗口(Focus Window)。如果没有Focus Window,input事件将会处于一个等待发送的状态,直到8S超时,但是短时间的Focus WIndow为null是正常的。
    
    ## 定位方法
    1.data_app_anr文件确认发生问题的Activity
    2.applogcat 搜索  WindowManager:Changingfocus    查看最后一次Windowchange的状态以及时间点
    3.log_event中查看最后一次 window change为何停留在中间态,查看报错聚焦窗口,排除monkey特有问题
    
    ## Monkey 剔除项
    聚焦窗口是SubPanel窗口,Subpanel窗口导致key事件无法传递。
    SubPanel的,只有82事件和109事件触发,属于Monkey特有问题。
    

    ----------------------------------------------------------7没有栈----------------------------------------------------------------------------------------------------------

    ----------------------------------------------------------8其他----------------------------------------------------------------------------------------

    ## 内存不足
    ---------------------------------------------
    DALVIK THREADS:"main"prio=5 tid=3 VMWAIT
    |group="main" sCount=1 dsCount=0 s=N obj=0x40026240self=0xbda8
    | sysTid=1815 nice=0 sched=0/0 cgrp=unknownhandle=-1344001376atdalvik.system.VMRuntime.trackExternalAllocation(NativeMethod) ---VMRuntime.trackExternalAllocation 内存不足
    atandroid.graphics.Bitmap.nativeCreate(Native Method)
    atandroid.graphics.Bitmap.createBitmap(Bitmap.java:468)
    atandroid.view.View.buildDrawingCache(View.java:6324)
    atandroid.view.View.getDrawingCache(View.java:6178)
    atandroid.view.ViewGroup.drawChild(ViewGroup.java:1541)
    
    ## 主线程耗时操作,数据库读写
    ------------------------------------------------------
    "main" prio=5 tid=1 Native
    held mutexes=
    kernel: (couldn't read /proc/self/task/11003/stack)
    native: #00 pc 000492a4 /system/lib/libc.so (nanosleep+12)
    native: #01 pc 0002dc21 /system/lib/libc.so (usleep+52)
    native: #02 pc 00009cab /system/lib/libsqlite.so (???)
    native: #03 pc 00011119 /system/lib/libsqlite.so (???)
    native: #04 pc 00016455 /system/lib/libsqlite.so (???)
    native: #16 pc 0000fa29 /system/lib/libsqlite.so (???)
    native: #17 pc 0000fad7 /system/lib/libsqlite.so (sqlite3_prepare16_v2+14)
    ative: #18 pc 0007f671 /system/lib/libandroid_runtime.so (???)
    native: #19 pc 002b4721 /system/framework/arm/boot-framework.oat (Java_android_database_sqlite_SQLiteConnection_nativePrepareStatement__JLjava_lang_String_2+116)
    at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:294)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:215)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:808)locked <0x0db193bf> (a java.lang.Object)
    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:793)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:696)
    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:690)
    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:299)
    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)locked <0x045a4a8c> (a com.xxxx.video.common.data.DataBaseHelper)
    at com.xxxx.video.common.data.DataBaseORM.<init>(DataBaseORM.java:46)
    at com.xxxx.video.common.data.DataBaseORM.getInstance(DataBaseORM.java:53)locked <0x017095d5> (a java.lang.Class<com.xxxx.video.common.data.DataBaseORM>)
    
    
  2. hilogs
    # 关键字
    ANR|InputDispatcher|WindowManager|BlockMonitor
    InputDispatcher|ActivityManager|WindowManger|ActivityTaskManager|Monkey|BlockMonitor|InputReader|lowmemorykiller|ANR in
    
    
         ## 省电精灵
      -----------------------------------------------------------------------------------
         F_z|Screen off|transition to
    
    

App_Crash

故障上报
当应用发生没有被捕获的异常时会发生crash导致应用闪退
故障日志

故障现象
应用闪退,有的应用会做处理可能会有提示框提示应用发生异常
Crash问题分析
  1. Dropbox

    • crash日志分析

      Process: com.huawei.calendar
      PID: 26468
      UID: 10035
      Flags: 0x28c83e45
      Package: com.huawei.calendar v120905310 (12.9.5.310)
      SYSVMTYPE: Art
      APPVMTYPE: Art
      Foreground: Yes
      Process-Runtime: 1954842
      Lifetime: 1954s
      Temp: shellFront: , shellFrame: , ambientTemp: 
      Freq: bigCur: 2203000, bigMax: 2203000, midCur: 1750000, midMax: 2000000, litCur: 1750000, litMax: 2000000, IPAValue: 
      MemInfo: MemTotal:        5803540 kB MemFree:          244308 kB MemAvailable:    1026964 kB Buffers:            2420 kB Cached:          1121780 kB SwapCached:        37692 kB Active:          2075304 kB Inactive:         918528 kB Active(anon):    1640460 kB Inactive(anon):   428688 kB Active(file):     434844 kB Inactive(file):   489840 kB Unevictable:      147868 kB Mlocked:          147868 kB SwapTotal:       3762852 kB SwapFree:        1208120 kB Dirty:              2340 kB Writeback:             0 kB AnonPages:       2009448 kB Mapped:           797232 kB Shmem:             53240 kB KReclaimable:     124428 kB Slab:             472940 kB SReclaimable:     119664 kB SUnreclaim:       353276 kB KernelStack:      110016 kB PageTables:       139920 kB NFS_Unstable:          0 kB Bounce:                0 kB WritebackTmp:          0 kB CommitLimit:     6664620 kB Committed_AS:   135709396 kB VmallocTotal:   263061440 kB VmallocUsed:      164324 kB VmallocChunk:          0 kB CmaTotal:         131072 kB CmaFree:               0 kB Protected:         35552 kB 
      Build: NZONE/GNT-AN00/TS-GIANT-M:11/CMDCSP100/102.0.1.168C07:user/release-keys
      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.huawei.calendar/com.android.calendar.EventInfoActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.baidu.mapcom.map.MapStatus
      	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4293)
      	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4495)
      	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:93)
      	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
      	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
      	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2706)
      	at android.os.Handler.dispatchMessage(Handler.java:109)
      	at android.os.Looper.loop(Looper.java:228)
      	at android.app.ActivityThread.main(ActivityThread.java:9103)
      	at java.lang.reflect.Method.invoke(Native Method)
      	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:614)
      	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1129)
      

设备资源类(CPU、内存)

黑屏冻屏类故障

不开机类故障

其他

常用命令

## 查看system_server进程信息
ps -A | grep system_server
ps -ef | grep system_server


ID模块划分

故障ID分类			
	故障ID	应用类故障ID	重启类涉及上层的故障ID
			
1.故障ID分类			
重启类			
	901000000	安卓SystemServer进程报错重启	Android Vmreboot
	901000001	安卓SystemServer阻塞重启	Vm Watching
	901000002	整机死机(含hungtask 120s等)	Panic                                        ## 底软看护
	901000003	驱动层watchdog复位	Hw Watchdog                                            ## 底软看护   死机一段时间重启
	901000004	未识别的故障	Unknown Fault                                                 ## 底软看护
	901000005	硬件异常	Hardware Fault                                                 ## 底软看护
	901000006	bootloader异常	Bootloader Crash                                         ## 底软看护
	901000007	lpm3异常	lpm3 Exception                                                   ## 底软看护
	901000008	安全子系统整机重启	Trustzone Rebootsys                                    ## 底软看护
	901000009	modem子系统整机重启	Modem Rebootsys                                      ## 底软看护
	901000010	press 10s重启	Press10s Reset                                               ## 底软看护
报错类			
	901001000	预置应用程序无响应	Pre-loaded Application ANR
	901001001	预置应用程序崩溃	Pre-loaded Application Crash
	901001002	预置程序进程TombStone	Pre-loaded Application Tomestone
	901001003	f	Non-Pre-loaded Application ANR
	901001004	非预置应用程序崩溃	Non-Pre-loaded Application Crash
	901001005	非预置程序进程TombStone	Non-Pre-loaded Application Tomestone
子系统			
	901002000	modem子系统异常	Modem Crash                                               ## 底软看护
	901002001	Hifi子系统异常	Hifi Crash                                                ## 底软看护
	901002002	Sensorhub子系统异常	Sensorhub Crash                                       ## 底软看护
	901002003	安全OS子系统异常:Tee OS异常	Trusted Zone:Tee OS Crash                     ## 底软看护
	901002104	安全OS子系统异常:tz异常	Trusted Zone:tz Crash                              ## 底软看护
	901002004	Hisee子系统异常	Hisee Crash                                                ## 底软看护
	901002005	短距/adsp/venus子系统异常	Wcnss/Adsp/venus Crash                            ## 底软看护
	901002006	IVP异常	sfdsfsdfsdfslixianglixianghnkkkk                                  ## 底软看护
	901002007	ISP异常	ISP Crash                                                         ## 底软看护
	901002008	NPU子系统异常	NPU Crash                                                   ## 底软看护
	901002009	DSS子系统异常	DSS Crash                                                    ## 底软看护
	901002010	Others子系统异常	Othersubsystem Crash                                         ## 底软看护
	901002011	HBS子系统故障	HBS failure                                                 ## 底软看护
	901002012	ODMF子系统故障	ODMF failure                                                ## 底软看护
	901002013	MSDP子系统故障	MSDP failure                                                 ## 底软看护
	901002014	MAPLE子系统故障	MAPLE failure                                                 ## 底软看护
	901002015	iGraphics子系统故障	iGraphics failure                                         ## 底软看护
	901002030	VR硬件watchdog复位	VR Hw Watchdog                                              ## 底软看护
	901002031	VR软件按watchdog复位	VR Software Watchdog                                        ## 底软看护
资源			
	901003000	进程线程泄露	Thread Limit
	901003001	进程文件句柄泄露	File Handler Limit
	901003002	进程内存限制	Memory Limit
	901003003	应用进程内存峰值	Process Memory Max Value
	901003010	资源类故障大数据统计	Resource Manage Bigdate
	901003011	NOTIFICATION速率过载故障	Notification speed overload
	901003012	BROADCAST速率过载故障	Broadcast Record speed overload
	901003013	RECEIVER注册泄露故障	Broadcast Receiver leak
	901003014	AlARM注册泄露故障	Alarm leak
	901003015	APPOPS回调泄露故障	AppOps callback
	901003016	APP反复Crash故障	APP repeat Crash
	901003017	PIDS/Thread泄露故障	PIDS/Thread leak
	901003018	CURSOR泄露故障	CURSOR leak
	901003019	应用IO读写量超标故障	IO write and read exceeded
	901003020	启动Windows泄露过载故障	Windows Leak in Activity
	901003021	IPC通信超时故障	IPC timeout
黑屏冻屏			
	901004000	系统冻屏故障	System Hung Fault                              ## 【【功能问题麻烦复测,提供视频hilog进一步分析
	901004001	黑屏	Black Screen                                          ## 【【user_type为空的不用标
	901004002	D状态侦测	Hung task Detector
	901004003	服务卡死	Service Die                                      ##【【 rpc问题 H回复不关注,可剔除
	901004004	系统冻屏屏侦测告警	System Hung Warning     
                 ## 【【 NetworkPredictMatcher: checkIfSignalGood: rsrp is too low: 1, thresh is: -117,当时的网络状况不佳
	901004005	应用卡死侦测	App Freeze 
                 ## main线程 Runnable 状态,其他binder线程无阻塞,未打印binder transaction信息,log无其他异常信息  在打印dumpstack时候就不卡顿了,                  只是瞬时堆栈打印,从上传log看暂无风险,可剔除
	901004006	应用卡死侦测告警	App Freeze Warning                      ## /vendor/bin/hw/qcrilNrd/  Tomestone
	901004007	应用卡死故障大数据统计	App Freeze Statics
不开机			
	901005000	不开机故障	Boot Fail Error

2.应用类故障ID				
901001001	应用异常	Crash	java.lang.NullPointerException	DIR_DROPBOX, "app_anr"
			java.lang.IdexoutOfBoundsException	
			java.lang.UnstaisfiedFoundError	
			java.lang.NoClassEdfFoundError	
			java.lang.OutOfMemoryError	
			java.lang.IllegalArgumentException	
			java.lang.IllegalStateException	
			java.lang.SecurityException	
			java.lang.RuntimeException	
			java.util.concurrent.TimeoutException	
			java.lang.NoSuchMethodError	
			java.lang.ClassCastException	
			java.util.ConcurrentModificationException	
901001000		ANR	input timeout	DIR_DROPBOX, "app_crash"
			service timeout	
			broadcast timeout	
901001002		Tomestone	SIGSEGV	DIR_DROPBOX, "SYSTEM_TOMBSTONE"
			SIGABRT	
			SIGBUS	
			SIGPIPE	
			SGIFPE	
			SIGILL	
			SIGRAP	
				
3.重启类涉及上层的故障ID				
901000000	上层重启	Android Vmreboot	system_server_crash	才内存
					内存泄露
					文件系统创建失败
					关键线程(zygote)分配不出内存
					art问题
					FD泄露
				surfaceflinger异常重启	
901000000	 Vm Watchdog	AMS、WMS、PKMS等service等锁或者死锁	
				显示相关卡死(hwui、surfaceflinger等)	
				system_server的Binder线程被占满	
				Input系统卡死	
				关键进程进入D状态或者Z状态	
				功耗baster进程卡死	
				

线程关键字解读

  • - main:main标识是主线程,如果是线程,那么命名成Thread-X的格式,x表示线程,id逐步递增;
    - prio:线程优先级,默认是5;
    - tid:tid不是线程的id是线程唯一标识ID;
    - Runnable:线程状态;
    - group:是线程组名称;
    - sCount:该线程被挂起的次数;
    - dsCount:是线程被调试器挂起的次数;
    - obj:对象地址;
    - self:该线程Native的地址;
    - sysTid:是线程号(主线程的线程号和进程号相同);
    - nice:是线程的调度优先级,值越小优先级越高;
    - sched:分别标志了线程的调度策略和优先级;
    - cgrp:调度归属组;
    - handle:线程处理函数的地址;
    - state:是调度状态;
    - schedstat:从/proc/[pid]/task/[tid]/schedstat读出,三个值分别表示线程在cpu上执行的时间、线程的等待时间和线程执行的时间片长度,不支持这项信息的三个值都是0;
    - utm:是线程用户态下使用的时间值(单位是jiffies);
    - stm:是内核态下的调度时间值;
    - core:是最后执行这个线程的cpu核的序号。
    

线程状态对应的定义:
libcore/ojluni/src/main/java/java/lang/Thread.java文件中的State枚举类;
art/runtime/thread_state.h文件中的ThreadState枚举类;

java中定义的状态c中定义的状态说明
TERMINATEDZOMBIE线程死亡终止运行
RUNNABLERUNNING/RUNNABLE线程可运行或正在运行
TIMED_WAITINGTIMED_WAIT执行了带有超时参数的wait,sleep,join函数
BLOCKEDMONITOR线程阻塞,等待获取对象锁
WAITINGWAIT执行了无超时参数的wait函数
NEWINITIALZING新建,正在初始化,为其分配资源
NEWSTARTING新建,正在启动
RUNNABLENATIVE正在执行JNI本地函数
WAITINGVMWAIT正在等待VM资源
RUNNABLESUSPENDED线程暂停,通常是由于GC或者debug暂停
UNKNOW未知状态

Signal码含义

kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
man 7 signal
       Signal     Value     Action   Comment
       ──────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard
       SIGQUIT       3       Core    Quit from keyboard
       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                     readers
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at terminal
       SIGTTIN   21,21,26    Stop    Terminal input for background process
       SIGTTOU   22,22,27    Stop    Terminal output for background process

       The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

       Next the signals not in the POSIX.1-1990 standard but described in SUSv2 and POSIX.1-2001.

       Signal       Value     Action   Comment
       ────────────────────────────────────────────────────────────────────
       SIGBUS      10,7,10     Core    Bus error (bad memory access)
       SIGPOLL                 Term    Pollable event (Sys V).
                                       Synonym for SIGIO
       SIGPROF     27,27,29    Term    Profiling timer expired
       SIGSYS      12,31,12    Core    Bad argument to routine (SVr4)
       SIGTRAP        5        Core    Trace/breakpoint trap
       SIGURG      16,23,21    Ign     Urgent condition on socket (4.2BSD)
       SIGVTALRM   26,26,28    Term    Virtual alarm clock (4.2BSD)
       SIGXCPU     24,24,30    Core    CPU time limit exceeded (4.2BSD)

       SIGXFSZ     25,25,31    Core    File size limit exceeded (4.2BSD)

常用的几种信号
signal 6(SIGABRT): 调用abort函数生成的信号
signal 7(SIGBUS): 意味这指针所对应的地址是有效地址,但是总线不能正常使用该指针。通常是未对齐的数据类型导致
signal 11(SIGSEGV): 程序中存在特定条件下的非法内存访问
#信号名称	#信号说明	                                            #默认处理
SIGABRT	   调用abort 时产生该信号,程序异常结束	                   进程终止并且产生core 文件
SIGALRM	   由alarm 或者 setitimer 设置的 定时器 到期	              进程终止
SIGBUS	   总线错误,地址没对齐等,取决于具体硬件	                    进程终止并产生core 文件
SIGCHLD	   子进程停止或者终止时, 父进程收到 该信号	                忽略该信号
SIGCONT	   让停止的进程继续执行	                                   进程终止并且产生core 文件
SIGFPE	   算术运算异常,除 0 等	                                    进程终止
SIGHUP	   进程的控制终端关闭时产生这个信号	                           进程终止并且产生core 文件
SIGILL	   代码中有非法指	                                          进程终止
SIGINT	   终端输入了CTRL+c 信号 下面用 ^c 表示	                      进程终止
SIGIO	   异步I/O ,跟 SIGPOLL 一样	                              进程终止
SIGIOT	   执行I/O 时产生 硬件错	                                 进程终止并且产生core 文件
SIGKILL	   该信号用户不能去捕捉和忽略它	                            进程终止

SIGBUS(signal 7)
#1 访问地址不对齐
   通过指针访问内存数据(short、int、long等基础类型),指针值不按其指向数据对齐:例如使用最后一个bit不为0的指针方位short,或使用最后两个bit不全为0的指针访问int;
   但这种访问只在部分CPU(如POWERP等)上会触发异常。
   当前我们主要使用X86,支持非法对齐访问,除非代码中使能CPU对齐效验(AC),否则不会发生异常。
   
## 案例
   例如从网络字节流中获取整形,直接使用指针强转而不采用依次读字节再移位组合,这类代码移植到有地址校验的CPU上可能会异常。
#2 访问的mmap文件的内存,超过了被映射的文件最后一个页面
   mmap函数可以映射超过当前文件大小的内存空间,当内存访问超过当前文件末尾(最后一个页面)可能会引起SIGBUS被发送给进程。这么做的原因是:文件大小再任意时刻可能被其他进程修改,系统更需要通知应用发生了超过文件范围的访问,否则应用写入数据可能丢失,读取的数据有可能不是文件中的真实数据。
  
## 案例
   代码中调用mmap的地方几乎没有,以上原因引起Bus error主要发生再用cp命令替换进程已加载的so过程中。
   因此要避免直接通过cp命令换包升级,可使用的方案:先rm原so,再拷贝新的so。
#3 硬件问题
  进程调用硬件驱动操作硬件,驱动检测到硬件异常,向进程发送SIGBUS。

稳定性评估模板

TS-BUG-98377 【11.0.1.7】【稳定性】【新发现】【APR】【module(com.android.dreams.phototable)】【故障类型(Crash)】APR网站上有7次Crash故障上报//android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:1617 -- Minor 挂起 李玄 lixuan0322 161版本12次
【原因分析】:H的王璨wx1004245、余书行wx495116:“不用分析处理,没有用户使用入口;该模块是给少数EMUI9时的老产品升级上来留的,基本没有产品在使用了,或者将该模块取消预置也可以”  
【问题影响】:没有用户使用入口,monkey特有场景。用户无感知
【规避措施】:不用分析处理,没有用户使用入口
【评估结论】:没有用户使用入口,不会影响用户使用
【共性/遗留】:否
【解决计划】:没有用户使用入口,monkey特有场景,用户无感知,挂起
【评估人员】:程海冰
【评估日期】:20220909

TS-BUG-99579 【Ballon】【 11.0.1.10】【稳定性】【新发现】【APR】【module(distributedsche/subname:distributedsche)】【故障类型(tombstone)】APR网站上有4次tombstone故障上报///system/lib64/libc++.so (abort_message+248 -- Minor 待修改 朱星星 LQ.zhuxingxing(11/23以未复现打回)161版本1次
【原因分析】:TS-BUG-105729问题单,是踩内存问题,现在正在打小包,开启kasan,未复现问题
【问题影响】:商用已合入,建议跟踪后续版本
【规避措施】:商用已合入,建议跟踪后续版本
【评估结论】:商用已合入,建议跟踪后续版本
【共性/遗留】:否
【解决计划】:商用已合入,建议跟踪后续版本
【评估人员】:程海冰
【评估日期】:20220909

TS-BUG-106441 【Ballon】【12.0.1.122】【稳定性】【新发现】【APR】【Module(com.cmcc.cmvideo)】【故障类型(Crash)】APR网站上有27次Crash故障上报/android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4500 -- Minor 待分析 朱星星 LQ.zhuxingxing(11/23以未复现打回)161版本9次
【原因分析】:上报次数较多的三方问题,起提示单作用,三方上报空指针异常,目前只在monkey下发现,应该是monkey特有的 
【问题影响】:这个问题是小概率事件,建议走小概率
【规避措施】:建议走小概率
【评估结论】:三方小概率事件
【共性/遗留】:否
【解决计划】:三方小概率事件
【评估人员】:程海冰
【评估日期】:20220909

TS-BUG-106445 【Ballon】【12.0.1.122】【稳定性】【新发现】【APR】【module(com.chinamobile.mcloud )】【故障类型(Crash)】APR网站上有11次Crash故障上报/com.cmic.sso.sdk.auth.AuthnHelper.umcLoginPre(AuthnHelper.java:1 --Minor 待分析 朱星星 LQ.zhuxingxing(非标问题驳回)161版本13次
【原因分析】:上报次数较多的三方问题,起提示单作用,三方自身问题,三方应用内部空指针异常,预置应用,目前小米应用商店、华为应用商店均不支持下载安装,建议剔除
【问题影响】:目前小米应用商店、华为应用商店均不支持下载安装,建议剔除
【规避措施】:目前小米应用商店、华为应用商店均不支持下载安装,建议剔除
【评估结论】:目前小米应用商店、华为应用商店均不支持下载安装,建议剔除
【共性/遗留】:否
【解决计划】:目前小米应用商店、华为应用商店均不支持下载安装,建议剔除
【评估人员】:程海冰
【评估日期】:20220909

TS-BUG-106738 【Ballon】【12.0.1.131】【稳定性】【新发现】【APR】【Module(com.huawei.calendar)】【故障类型(Crash)】APR网站上有2次Crash故障上报/android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172 --Minor 待分析 朱星星 LQ.zhuxingxing(h合入代码后,新版本未发现此问题)161版本3次
【原因分析】:h合入代码后,新版本未发现此问题
【问题影响】:带入修改,跟踪后续版本
【规避措施】:带入修改,跟踪后续版本
【评估结论】:带入修改,跟踪后续版本
【共性/遗留】:否
【解决计划】:带入修改,跟踪后续版本
【评估人员】:程海冰
【评估日期】:20220909

案例

ANR

107023
【现象】:【Q7503】【11.0.1.31(C11E4R4P1log) 】【稳定性】【新出现】【2/10】电脑安装H手机助手,在手机是否安装H手机助手界面,选择取消没有反应,然后弹出“应用安装器”无响应提示框
【概率】:低概率
【根因】:

如下 eventlog,com.android.packageinstaller 发生三次anr
均无dropbox信息,只有cpu调度信息,没有具体堆栈信息,无log无法具体分析,已和刘婵沟通,不能复现,冷僻场景,可小概率跟踪

Line 14949: 10-08 10:34:26.916 1392 12567 I am_anr : [0,25435,com.android.packageinstaller,818429509,Input dispatching timed out (960b6ba com.android.packageinstaller/com.android.packageinstaller.InstallStaging (server) is not responding. Waited 5000ms for MotionEvent(deviceId=4, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=8.0, yPrecision=8.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (308.2, 2283.5)]), policyFlags=0x66000000)]
Line 16410: 10-08 10:40:00.658 1392 17468 I am_anr : [0,1593,com.android.packageinstaller,818429509,Input dispatching timed out (9a2e461 com.android.packageinstaller/com.android.packageinstaller.InstallStaging (server) is not responding. Waited 5000ms for MotionEvent(deviceId=4, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=8.0, yPrecision=8.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (286.1, 2268.5)]), policyFlags=0x66000000)]
Line 17518: 10-08 10:43:10.917 1392 19411 I am_anr : [0,1595,com.android.packageinstaller,818429509,Input dispatching timed out (e107622 com.android.packageinstaller/com.android.packageinstaller.InstallStaging (server) is not responding. Waited 5000ms for MotionEvent(deviceId=4, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=8.0, yPrecision=8.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (359.1, 2239.0)]), policyFlags=0x66000000)]

10-08 10:43:23.531 1392 19411 E ActivityManager: ANR in com.android.packageinstaller (com.android.packageinstaller/.InstallStaging)
10-08 10:43:23.531 1392 19411 E ActivityManager: PID: 1595
10-08 10:43:23.531 1392 19411 E ActivityManager: Reason: Input dispatching timed out (e107622 com.android.packageinstaller/com.android.packageinstaller.InstallStaging (server) is not responding. Waited 5000ms for MotionEvent(deviceId=4, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=8.0, yPrecision=8.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (359.1, 2239.0)]), policyFlags=0x66000000)
10-08 10:43:23.531 1392 19411 E ActivityManager: Parent: com.android.packageinstaller/.InstallStaging
10-08 10:43:23.531 1392 19411 E ActivityManager: Load: 12.02 / 13.01 / 12.61
10-08 10:43:23.531 1392 19411 E ActivityManager: ----- Output from /proc/pressure/memory -----
10-08 10:43:23.531 1392 19411 E ActivityManager: some avg10=0.36 avg60=0.20 avg300=0.15 total=10344284
10-08 10:43:23.531 1392 19411 E ActivityManager: full avg10=0.00 avg60=0.02 avg300=0.00 total=3177995
10-08 10:43:23.531 1392 19411 E ActivityManager: ----- End output from /proc/pressure/memory -----
10-08 10:43:23.531 1392 19411 E ActivityManager:
10-08 10:43:23.531 1392 19411 E ActivityManager: CPU usage from 0ms to 12654ms later (2022-10-08 10:43:10.850 to 2022-10-08 10:43:23.504):
10-08 10:43:23.531 1392 19411 E ActivityManager: 218% 19345/dex2oat64: 187% user + 31% kernel / faults: 135724 minor 4 major
10-08 10:43:23.531 1392 19411 E ActivityManager: 25% 25178/com.huawei.appmarket: 14% user + 10% kernel / faults: 3662 minor
10-08 10:43:23.531 1392 19411 E ActivityManager: 19% 6546/cds_ol_rx_threa: 0% user + 19% kernel
10-08 10:43:23.531 1392 19411 E ActivityManager: 72% TOTAL: 54% user + 15% kernel + 0.2% iowait + 1.2% irq + 0.8% softirq
【无法下一步分析的具体原因:无log,无法继续分析
【需要测试重新提供的信息:复现后正常抓取log即可
【影响】:anr
【解决计划】:小概率跟踪
【开发复现总次数】:50
【复现方案或测试建议】:如单问题描述
【复现方案评审人员】:景旭
【现象】:【2100965622][ 应用使用问题/ 爱奇艺 /稳定性(使用中闪退、无响应、卡死、黑白屏) /使用中冻屏卡死(无弹框) ]爱奇艺使用移动数据播放影片,从外面回家,进屋后自动连接wifi成功,此时正在播放广告,过程中程序无响应
【概率】:低概率
【根因】:
综下所述,用户反馈为非问题,建议剔除
1、 
问题发生时间2022-02-22 23:42:19,用户反馈的问题发生时间,下面目录下并没有打印出anr堆栈
NEP-AN00_NEP-AN00+12.0.1.112(SP2C04E2R2P2log)_ID103_QUES2100965622_TMX9K21B30900202_20220222234334_BetaClub\dropbox
2、
NEP-AN00_NEP-AN00+12.0.1.112(SP2C04E2R2P2log)_ID103_QUES2100965622_TMX9K21B30900202_20220222234334_BetaClub\hilogs\eventslogcat-log.I162.20220222-234329
eventlog中搜索am_anr,并未发现anr信息
3、
在hilog中并没有application not resptonding的字样

【影响】:爱奇艺 anr
【下一步计划】:用户反馈为非问题,建议剔除

脚本分析

获取Android设备中的全部数据信息及日志
故障上报

故障日志

故障现象

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值