常见问题:
1、查杀:
查杀一般分为两个方向一种是内存不足的查杀,一种的是因为温度限频查杀,统称为内存查杀,两个问题的分析思路不同
1、内存不足查杀:
主要是因为当用户出现后台运行多个APP或者是相机等消耗内存较大的进程的时候就会出现应用查杀情况
2、温度限频查杀:
温度限频查杀主要是根据查杀的内存占比和被杀时出现的log日志来决策的
总结:
两种不同的查杀应该座位不同的处理方式前期思路是一样的,后期分析不同
前期思路:
1、查杀应用
2、查杀时间
3、查杀的关键字
4、为什么被查杀
5、内存紧张查杀&温度查杀
2、ANR:
ANR一般常见的问题都是因为主线程持锁阻塞问题导致的,或者是网络问题导致出现的ANR问题或者是IO占比过高导致出现的ANR问题:
主线程持锁问题就需要从ANR日志里查看是什么问题在进行处理
查杀:
1、什么事查杀问题:
查杀主要是根据用户的启动模式来判断,测试会根据启动一个应用后,把应用退出后台,然后启动其他应用,然后再次打开首次应用,如果首次应用是冷启动,就可以判断为被杀了
1.1、如何看查杀:
log个问题的存放地
一般打开从jira上下载下来的log基本上都差不多,但是主要的log还是要在bugreport里面
解压后会出现主要查看的是这两个文件
bugreport这个文件是手机log,从这里可以看到用户操作手机的时间节点
dumpstate_board这个文件里面是手机的壳温度
开始查看bugreport文件
DUMP OF SERVICE CRITICAL cpuinfo:
这个标题主要是看总体CPU占比的
从截图上可以看到占比system_server占比CPU过高
下面开始查看查杀关键字
1. am_proc_died:进程被杀死的时间
有进程被杀时间点及原因包名,则直接搜索
am_proc_died: [0,[0-9]*,xxxx,,xxxx//代表包名----这是个样式模版
例子:
03-25 16:14:01.357 1000 2215 6034 I am_proc_died: [0,31528,com.tencent.mobileqq,702,10]
解释:
这条日志信息来自 Android 操作系统,指示一个名为 "com.tencent.mobileqq" 的进程 ID 为 31528 的进程已经终止。消息开头的 "I" 代表 "Info",表示这是一条信息性消息。消息还包括检测到该进程死亡的进程 ID(1000),父进程 ID(2215)和线程 ID(6034)。消息末尾的数字 "702" 和 "10" 是额外的信息,它们的含义如下: - 702:该进程的退出码。在 Unix 系统中,进程退出时会返回一个整数值,称为退出码。退出码通常用于指示进程的退出状态,例如是否成功完成任务等等。在这种情况下,退出码为 702,但具体含义需要查看该进程的文档或代码才能确定。 - 10:该进程的进程组 ID。在 Unix 系统中,每个进程都属于一个进程组,进程组 ID 用于标识该进程所属的进程组。在这种情况下,进程组 ID 为 10。
2.然后再查找一下进程的开始时间:
am_proc_start:[0,[0-9]*,xxxx,,xxxx//代表包名----这是个样式模版
03-25 16:14:01.357 1000 2215 6034 I am_proc_start: [0,31528,com.tencent.mobileqq,702,10]
解释:
开始的解释和结束的解释基本都差不多只是开头不同一样
03-25 16:14:00.945 1000 2215 4559 I am_kill : [0,3469,com.milink.service:core,935,camera boost,114948] 03-25 16:14:00.959 1000 2215 4559 I am_kill : [0,405,com.tencent.mobileqq:privileged_process0,905,camera boost,214012] 03-25 16:14:00.980 1000 2215 6038 I am_proc_died: [0,3469,com.milink.service:core,935,19] 03-25 16:14:00.987 1000 2215 4559 I am_kill : [0,32522,com.tencent.mobileqq:tool,905,camera boost,353896] 03-25 16:14:00.996 1000 2215 4559 I am_kill : [0,31528,com.tencent.mobileqq,702,camera boost,456120]
解释:
根据您提供的日志信息,可以看出应用程序 com.tencent.mobileqq 及其相关进程被标记为 "camera boost" 并被终止了。这种终止可能是由系统的内存管理策略触发的,系统可能认为这些进程正在消耗过多的系统资源,特别是与相机相关的资源,因此将它们终止以释放内存和其他系统资源。
从被查杀的地方开始查找一些信息从而就能知道为什么被查杀
总结:
一般应用被查杀主要原因都会提现到被查杀的时候,查杀的思路就是看进程是因为什么被杀的
开始查看dumpstate_board文件
一般来看这种文件主要是因为查杀的时候显示因为高温限频被查杀,或者是页面出现卡顿也有可能是高温导致的所以一把情况这个时候都是需要让热或者是功耗帮忙看一下是否正常或者是否能修复
用上面这张图片举例子
如何查看是不会因为高温导致的卡顿就需要看壳温和限频
VIRTUAL-SENSOR(壳的温度) 24977(24°)
lmh_cpu7(CPU限频,手机CPU0-7) 0(限频的大小)
总结:
如果是因为手机高温限频锁导致的查杀或者是卡顿问题,这个时候就需要找热或者是功耗人员看一下是什么情况是否正常了,
ANR分析方案
如果是 ANR 问题我们就需要从ANR日志中获取原因
ANR 日志一把都会存放在:
data
anr
对照的ANR出现的时间进行查看是什么问题
分析ANR持锁的问题:
查看ANR问题主要看是不是有**lock <0x04da9bd0>**这样的关键字,如果有就看一下后面的id 这个截图的id是83 那我们就去下面找一下id=83的进程
从下面的log可以看出主要的原因是因为闹钟导致的主线程阻塞出现的ANR问题这个时候就需要请相关的业务人员帮忙看一下,为什么阻塞了
这张图片主要是因为应用无响应导致出现的ANR问题
在这个日志中,有几个关键字可以指示是因为应用无响应导致的ANR:
-
"ANR in" 或 "Application Not Responding":通常出现在日志开头,表示应用无响应。
-
"Blocked" 或 "BlockedReason":表明线程被阻塞,无法继续执行。
-
"Native":表示线程处于本地代码(Native)执行的状态,可能是因为执行了耗时的本地操作导致的阻塞。
-
"main" 或 "主线程":表示主线程被阻塞,主线程的阻塞是导致应用无响应的主要原因之一。
-
"Cmd line":显示应用的命令行,有助于确定是哪个应用发生了ANR。
-
"DALVIK THREADS" 或 "ART THREADS":显示了当前进程中的线程信息,可以检查是否有线程长时间被阻塞。
在这个日志中,可以看到主线程("main")被阻塞,而且是在执行应用的代码("com.fy.zdxs.mi")时发生的,这些都是指示应用无响应的关键字。
出现的常见GC问题
最近出现抖音内存泄漏长时间GC导致出现的卡顿问题,从log上如何查看是因为GC问题导致的抖音出现的卡顿或者是ANR问题
从上面的截图可以看到进程后有个 GC 大写的 这个明显是抖音内存泄漏导致的问题像类似的问题需要找系统稳定性,三方兼容帮忙看一下
思路:
查看是不是GC问题,需要查看时间和进程名称,然后看一下GC数量在确定是不是GC问题,还有要看看是不是GC回收时间较长倒是出现的ANR问题
每个GC回收都会有相关的回收内存的大小和回收的时间,可以根据时间的长短来进行查看,是不是GC时间过长
查看每个进程占比内存的大小
am_pss----每个进程在不同的时间节点出现的内存占比
[PID, UID, 进程名称, PSS总内存, 分配总内存, 分配内存, Native Heap, Dalvik Heap, 其他, PSS的次数, 最后 PSS 的次数]
am_pss : [24149,10156,com.google.android.googlequicksearchbox:search,69756928,48447488,14669824,128151552,0,3,12]
参考文档:
1、学习文章
https://www.jacpy.com/2017/04/24/android-anr-thread-lock-analysis.html
2、学习文章:
https://segmentfault.com/a/1190000040142277
NAR教学: