日志面面谈

日志面面谈

日志面面谈

为什么需要日志

复现问题,回溯到问题产生时候的系统状态,有利于定位和分析问题。

安卓日志有哪些?

cpu

关注的纬度:

单个应用使用

系统cpu分配

温度

有什么用:

App卡顿、ANR

App异常退出

怎么用:

1.应用使用

adb shell dumpsys activity processes >> D:\app_process.log

adb shell COLUMNS=512 top -n 1 -s cpu >>D:\cpu.log

adb shell COLUMNS=512 top -n 1 -s vss >>D:\cpu_vss.log

adb shell COLUMNS=512 top -n 1 -s thr >>D:\cpu_thr.log

CPU内存

adb shell dumpsys cpuinfo >> D:\cpu_meminfo.log

CPU温度

adb shell cat /sys/class/thermal/thermal_zone0/temp >> D:\cpu_tmp.log

内存存储器

关注的纬度:

系统内存分配情况

adb shell COLUMNS=512 top -n 1 -s vss

adb dumpsys meminfo

单个应用内存分配情况

profile->memory->hprof

adb shell dumpsys meminfo com.xx

leakcanary

有什么用:

帮助定位内存抖动、内存溢出、内存泄漏的问题

怎么用:

系统内存

adb shell dumpsys meminfo >> D:\system_meminfo.log

指定app内存

adb shell dumpsys meminfo com.xx >>>> D:\com.xx_meminfo.log

adb shell am dumpheap com.xx/data/anr/Launcher.hprof

任务栈

关注的纬度:

Ams Stack

Service Stack

Broadcast

有什么用:

关注界面上启动过的Activity、Service、Broadcast,分析页面导航异常、页面加载异常、后台任务异常的问题

怎么用:

1.activity

adb shell dumpsys activity >> D:\AmsStack.log

2.广播

adb shell dumpsys activity broadcasts >>D:\broadcasts.log

3.服务

adb shell dumpsys activity services >>D:\services .log

anr

关注的纬度:

系统anr日志

Blockcanary日志

有什么用:

分析App无响应的原因、App被杀死的原因

怎么用:

adb pull /data/anr D:\2021\

trace

关注的纬度:

trace日志

有什么用:

分析App无响应的原因、App被杀死的原因

Log

关注的维度:

Systemlog

Eventlog

kernellog

怎么用:

logcat输出

adb logcat -v time >D:\log.txt

dev/log导出

adb pull /dev/log/ D:\ohters\

该目录有4种文件

radio:输出通讯系统(无线/电话相关)的log。

system:输出系统缓冲区的log。

events:输出事件缓冲区的log。

main:全部java层的log, 也是主缓冲区 (默认缓冲区)。

3.其他路径的日志按需导出

/data/local/tmp/*

/data/tmp/*

/data/system/usagestats/*

/data/system/appusagestates/*

/data/system/dropbox/*

/data/tombstones/*

/data/anr/*

综上可以看到,要抓的日志真是太多了,抓起来麻烦,看起来汇总分析也麻烦,那么有没有一个现成工具供我们收集和分析呢,答案是有!安卓系统提供了Bugreport!

日志阅读的思路

第一步:定位进程死亡的时间点,参考《进程-确定进程死亡时间》

第二步:假设进程死亡的原因,设置怀疑点,根据经验搜索关键字。

第三步:复现出现异常的步骤,验证怀疑点是否正确

日志解析工具Bugreport

如何用

导出日志

adb bugreport 1>>D:\ohters\bugreport.log

下载ChkBugReport.jar

生成html报告

java -jar ./chkbugreport.jar ./bugreport.log

可能遇到的问题:

Failed to get bugreportz version, which is only available on devices running Android 7.0 or later. Trying a plain-text bug report instead.

解决步骤:

下载21版本的adb

关闭正在运行的高版本adb adb kill-server

指定21版本的adb来捕获日志D:\ohters\adb bugreport 1>>D:\ohters\bugreport.log

有什么用

输出到Android系统的Bugreport包含系统服务 (dumpsys)、错误日志 (dumpstate) 和系统消息日志 (logcat) 的诊断输出。系统消息包括设备抛出错误时的堆栈轨迹,以及从所有应用中使用 Log 类写入的消息。

配合安卓工具ChkBugReport可以将日志信息可视化显示到静态页面种。

日志分析经验积累

日志阅读的思路

第一步:定位进程死亡的时间点,参考《进程-确定进程死亡时间》

第二步:假设进程死亡的原因,设置怀疑点,根据经验搜索关键字。

第三步:复现出现异常的步骤,验证怀疑点是否正确

关键字附录参考

搜索 Fatal

搜索 uncaughtException

搜索 crashreport

搜索 Exception

搜索 Application Not Response

搜索 NetworkOnMainThreadException

搜索 ANR Warning

搜索 AnrManager

搜索 Anr in

13种常见进程死亡原因

java层的崩溃

通过java层logcat看是否崩溃(crashHandler或者调试版logcat)

如果java层没有任何相关日志打印就从c层看(在bugreport.zip->FS->data->tombstones->对应时间的日志)

低内存原因

搜索关键字lowmemorykiller

导出内存日

被其他进程杀死

Android11我们可以通过在bugreport日志文件里面搜索Historical Process Exit for关键字,就能看到自己的进程被谁杀死。

怀疑是进程已经不活动了被系统杀

搜索关键字empty for

06-10 13:32:13.057 1000 1700 1812 I am_kill : [0,2409,com.miui.screenrecorder,955,empty for 1800s]

epmty进程被杀,系统内empty进程数量达到阈值26(不同手机略有不同)会按时间顺序查杀进程,搜索关键字empty ;

06-10 16:00:54.244 1000 1700 1795 I ActivityManager: Killing 20081:com.android.providers.calendar/u0a72 (adj 985): empty #26

自己退出,结束自己,搜索关键字: exited 、cleanly

有时候应用退出不一定是因为奔溃,可能是程序员代码没写对或者漏掉了一些环境细节让应用主动退出了。除了看ApplicationExitInfo外我们还能通过logcat看到。

06-10 10:17:04.053 root 689 689 I Zygote : Process 29263 exited cleanly (0)

06-10 10:17:04.056 1000 1692 1805 I libprocessgroup: Successfully killed process cgroup uid 10252 pid 29263 in 122ms

06-10 10:17:03.933 1000 1692 5189 I ActivityManager: Process com.tencent.tmgp.pubgmhd (pid 29263) has died: hvy HVY

被系统进程杀掉

系统app调用forceStopPackage 接口,杀掉我们的应用,我们搜索stop com.xxx.aaa due to from process

06-15 19:34:10.498 26589 29585 I ActivityManager: Killing 14459:com.xiaomi.misubscreenui/1000 (adj 0): stop com.xiaomi.misubscreenui due to from process:com.miui.voiceassist

线程过度使用CPU导致所在进程被杀

上次adj降为Service以下到现在经历2221553 ms,cpu POWER_CHECK_MAX_CPU_4 = 2, 两次检测时间间隔为300044 ms,使用cpu时间为16720ms,超过2%,就会被杀。

06-06 18:07:44.445 1000 1651 1798 I am_kill : [0,22157,com.ximalaya.ting.android,900,excessive cpu 16720 during 300044 dur=2221553 limit=2]

06-06 18:07:44.445 1000 1651 1798 I ActivityManager: Killing 22157:com.ximalaya.ting.android/u0a239 (adj 900): excessive cpu 16720 during 300044 dur=2221553 limit=2

06-06 18:07:44.566 root 681 681 I Zygote : Process 22157 exited due to signal 9 (Killed)

线程异常所在进程被杀,进程的某个线程发生异常,自己发Signal 9信号给Zygote 杀掉自己,搜索关键字 Sending signal

06-07 16:53:03.027 1000 2566 2582 I Process : Sending signal. PID: 2566 SIG: 9

06-07 16:53:03.154 root 681 681 I Zygote : Process 2566 exited due to signal 9 (Killed)

06-07 16:53:03.167 1000 1734 4006 I ActivityManager: Process com.android.systemui (pid 2566) has died: pers PER

应用重装,被杀,搜索关键字Force stopping、installPackageLI、deletePackageX

06-10 15:59:30.827 1000 1700 1812 I ActivityManager: Force stopping com.google.android.gms appid=10190 user=-1: installPackageLI

06-10 15:59:30.984 1000 1700 1812 I ActivityManager: Killing 3876:com.google.android.dialer/u0a180 (adj -700): stop com.google.android.gms: installPackageLI

ANR被杀

OOM被杀

死锁被杀,搜索关键字Force finishing 、Force removing、Force stopping

上一篇: 争夺火猴 《风云无双》只为求取泥菩萨一卦
下一篇: 全球多地阿根廷球迷狂欢庆祝世界杯夺冠

相关文章

淘宝新品上架的流程是什么?上架后需要怎么样维护
无上的美学谋杀?——浅谈《锈湖旅馆》
国内外b2b平台信息汇总(全球21大外贸B2B采购平台介绍与推荐)
胡彦斌最好听的十首歌曲 胡彦斌好听的歌排行 胡彦斌歌曲推荐
电脑没无线功能,连不上网络
于谦为什么那么有钱