android kmsg 分析,Android性能-ANR

ANR基本分析定位方法

ANR分析主要是Input、Broadcast、Service三种ANR, 对应的时间主要有以下几种:其中后台时间相对长一些,broadcast可以达到60s,但是前台一般最高10s,后台service是20s。

类型 前台 后台

Input 8s 8s

Forground Broadcast 10s 20s

Background Broadcast 10s 60s

Service 10s 20s

定位问题思路是,首先查看anr的进程,类型,cpu占用,iowait等指标

activity、broadcast、还是service,是前台还是后台。

cpu占用是否过高,iowait是否正常,是否是由于整机问题影响

查看线程调用栈,main主线程是由于什么原因导致的anr, 等锁lock,是否死锁? 是否binder卡住了? 是否no focus windows可能是由于进程被杀,搜索是否有window change查看界面切换的影响?wait和notifiy导致的死锁,查看相关代码?其他卡住的地方File、database、sharepreference可以怀疑文件系统等。

引起ANR问题的根本原因,总的来说可以归纳为两类:

• 应用进程自身引起的,例如:

主线程阻塞、挂起、死循环

应用进程的其他线程的CPU占用率高,使得主线程无法抢占到CPU时间片

• 其他进程间接引起的,例如:

当前应用进程进行进程间通信请求其他进程,其他进程的操作长时间没有反馈

其他进程的CPU占用率高,使得当前应用进程无法抢占到CPU时间片

分析ANR问题时,以上述可能的几种原因为线索,通过分析各种日志信息,大多数情况下你就可以很容易找到问题所在了。

http://www.cnblogs.com/zl1991/p/5947157.html

稳定性

anr处理思路

ANR原因

Application Not Responding 三种类型,主线程事件长时间无法执行

KeyDispatchTimeout(input)

static final int KEY_DISPATCHING_TIMEOUT = 5*1000;

BroadcastTimeout(broadcast)

static final int BROADCAST_FG_TIMEOUT = 10*1000;

static final int BROADCAST_BG_TIMEOUT = 60*1000;

ServiceTimeout(service)

static final int SERVICE_TIMEOUT = (20*1000);

static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10;

查看日志

ANR存储路径 /data/anr/

dropbox存储路径 /data/system/dropbox/

tombstones存储路径 /data/tombstones

Process: com.android.contacts 进程名字

Flags: 0x38d8be4d 应用安装标志,预装还是安装等

Package: com.android.contacts v24 (1.2) (报名和版本号)

Foreground: Yes (anr在前台还是后台)

Activity: com.android.contacts/com.mediatek.contacts.list.ContactListMultiChoiceActivity

Subject: Input dispatching timed out (Waiting to send key event because the focused window has not finished processing all of the input events that were previously delivered to it. Outbound queue length: 0. Wait queue length: 1.) (ANR类型信息)

Build: D-171117V33:user/release-keys

CPU usage from 74494ms to 0ms ago (2019-11-09 21:32:06.966 to 2019-11-09 21:33:21.460):

104% 323/mobile_log_d: 17% user + 86% kernel / faults: 2622 minor

56% 1041/system_server: 41% user + 14% kernel / faults: 30698 minor 36 major

34% 1408/com.android.phone: 28% user + 6% kernel / faults: 17027 minor 35 major

15% 5541/android.process.acore: 13% user + 2.3% kernel / faults: 10865 minor 49 major

10% 248/servicemanager: 4.4% user + 6.5% kernel / faults: 63 minor

10% 249/surfaceflinger: 5.1% user + 5.6% kernel / faults: 1645 minor 1 major

8.6% 215/logd: 2.7% user + 5.8% kernel / faults: 310 minor 11 major

5.6% 1848/com.android.contacts: 4.4% user + 1.1% kernel / faults: 9569 minor 677 major

3.7% 1155/com.android.systemui: 2.9% user + 0.7% kernel / faults: 12145 minor 50 major

98% TOTAL: 54% user + 42% kernel + 0.1% iowait + 0% softirq

单进程信息

读取/proc//task//stat,utime,stime两次相差/两次采样周期的系统uptime;进程差值时间

56% 1041/system_server: 41% user + 14% kernel / faults: 30698 minor 36 major

cpu占用信息 进程信息: 用户态时间执行比 + kernel执行时间比 / 发生page faults的次数,一个minor,一个是major

总TOTAL信息

读取/proc/stat信息 http://www.linuxhowtos.org/System/procstat.htm

98% TOTAL: 54% user + 42% kernel + 0.1% iowait + 0% softirq

user: normal processes executing in user mode

nice: niced processes executing in user mode

system: processes executing in kernel mode

idle: twiddling thumbs

iowait: waiting for I/O to complete

irq: servicing interrupts

softirq: servicing softirqs

trace日志和logcat日志要结合起来看。

trace中的ANR原因,进程号,时间,首个调用栈等信息非常关键。

logcat日志中一方面查找对应时间的日志,检查应用的行为,检查具体导致SIG:3发出的原因。

ANR in XXX也是一个关键字,可以在logcat日志中检索。不过这句日志打印的时间通常要比ANR发生的时间晚一些。找到这部分log后,应该顺着向前继续查找ANR发生的日志。

线程状态,锁,binder等。

查看main线程调用栈,确认ANR栈类型,不同栈类型问题分析方法有所差异

等锁

Binder对端

wait栈

java标准接口

NativePollOnce

ANR时间点确认:logcat里搜索“anr in”,或者在log_events里直接搜索anr。请注意logcat搜到的anr in时间很可能比anr时间滞后几秒。这么做是为了确认我们anr的时间范围。之前讲过了各种类型的anr时间。结合我们可以知道我们重点要关注的是什么时间段。例如后台广播在后台anr。那么我们重点关注日志范围是 (ANR时间-60秒)~ ANR时间

查看kmsgcat-log。确认线程是否D状态、是否多个线程Block

可以搜索卡住的线程是否被hungtask打印,hungtask发现D状态会主动触发打印

crash处理思路

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值