崩溃优化(下)应用崩溃了,你应该如何去分析?

2019-03-20  本文已影响0人  YoungTr

崩溃现场

1. 崩溃信息

从崩溃的基本信息,可以对崩溃有初步的判断。

    AndroidRuntime: FATAL EXCEPTION: MyThread
    Process: com.simple.carsh, PID: 6825
    java.lang.ArithmeticException: divide by zero
        at com.simple.crash.TouchActivity$1.run(TouchActivity.java:33)

2. 系统信息

3. 内存信息

OOM 、 ANR、虚拟内存耗尽等,很多崩溃都跟内存有直接关系。

// /proc/meminfo

MemTotal:        1550948 kB
MemFree:          465832 kB
Buffers:           25008 kB
Cached:           764404 kB
SwapCached:            0 kB
Active:           480312 kB
Inactive:         550552 kB
Active(anon):     241468 kB
Inactive(anon):    12292 kB
Active(file):     238844 kB
Inactive(file):   538260 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:        663432 kB
HighFree:          13024 kB
LowTotal:         887516 kB
LowFree:          452808 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        241436 kB
Mapped:           188572 kB
Shmem:             12324 kB
Slab:              21936 kB
SReclaimable:      10864 kB
SUnreclaim:        11072 kB
KernelStack:        4056 kB
PageTables:         6132 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      775472 kB
Committed_AS:   18331812 kB
VmallocTotal:     122880 kB
VmallocUsed:       26120 kB
VmallocChunk:      31652 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       4096 kB
DirectMap4k:       16376 kB
DirectMap4M:      892928 kB


//  /proc/self/status 

Name:     com.sample.name   // 进程名
FDSize:   800               // 当前进程申请的文件句柄个数
VmPeak:   3004628 kB        // 当前进程的虚拟内存峰值大小
VmSize:   2997032 kB        // 当前进程的虚拟内存大小
Threads:  600               // 当前进程包含的线程个数

4. 资源信息

5. 应用信息

崩溃分析

第一步:确认重点

  1. 确认严重程度。优先解决 Top 崩溃或者对业务有重大影响的崩溃。
  2. 崩溃的基本信息。确定崩溃的类型已经异常描述,对崩溃有大致的判断。
  1. LogCat。从 LogCat 中我们可以看到当时系统的一些行为跟手机状态,例如出现 ANR 时,会有 “am_arn”; App 被杀时,会有“am_kill” 。

  2. 各个资源情况。结合崩溃信息,看看是不是跟“内存信息”有关,是不是跟“资源信息”有关,比如物理内存不足,虚拟内存不足,还是文件句柄 fb 泄漏了。

内存与线程相关的信息都需要特别注意,很多崩溃都是它们使用不当造成的。

第二步:查找共性

共性问题例如是不是因为安装了 Xposed,是不是只出现在 x86 的手机等

第三步:尝试复现

  1. 查找功能的原因。通过上面的共性归类,先看看是某个系统版本的问题,还是某个厂商特定 ROM 的问题。

  2. 尝试规避。查看可疑代码调用,是否使用了不恰当的 API,是否可以切换其他的实现方式规避。

  3. Hook 解决。

上一篇下一篇

猜你喜欢

热点阅读