Android logs 分析,Android 平台log 总结

一、log 分类

aplog

modem log

anr

log

panic log

tombstones log

dropbox log

monkey log

二、aplog

aplog 是分析android 系统问题的基本log,不管是应用crash、

ANR

还是别的各种系统异常,aplog都是很有必要的。

1). aplog 包含android log 和 kernel log,通过

logcat 命令可以捕获。

service apk_logfs /system/bin/logcat -b system -b events -b main -b

radio -n 20 -r20480 -v threadtime -f

/data/logs/aplog

class late_startdev/log

disabled

seclabel u:r:apk_logfs:s0

这里是在rc 文件里定义的一个log 服务,这样就可以在需要时start这个服务。比如user 版本默认log都是关闭的,但是在user版本遇到问题需要log 时就可以在工程应用里打开log服务捕获log。

-b 指的是要捕获那个缓冲区的log,一般有system events main radio crash

kernel 六种类型缓冲区,前5种是android 默认的,kernel 是各平台商自加,实现各不一样,使用时会有差异。有的打印kernel log 需要logcat -b kernel

,有的就不需要。

frameworks/base/core/java/android/util/Log.java

public static final int LOG_ID_MAIN = 0;

public static final int LOG_ID_RADIO = 1;

public static final int LOG_ID_EVENTS = 2;

public static final int LOG_ID_SYSTEM = 3;

public static final int LOG_ID_CRASH = 4;

-n 指的是循环保存多少个log文件

-r 指每个log文件最大size,单位是k。-r20480 指的是20M。

-f 是log文件路径

2). Aplog读写最终由kernel logger驱动使用环形缓冲区实现。

/linux-3.10/drivers/staging/android/logger.c

blog_dfd0075c0102wfmv.html

Log 设备节点:

/dev/log/main

/dev/log/radio

/dev/log/system

/dev/log/events

3). Kernel log

控制:

下面是kernel 定义的log等级

#define KERN_EMERG

KERN_SOH "0"

#define KERN_ALERT

KERN_SOH "1"

#define KERN_CRIT

KERN_SOH "2"

#define KERN_ERR

KERN_SOH

"3"

#define KERN_WARNING

KERN_SOH "4"

#define KERN_NOTICE

KERN_SOH "5"

#define KERN_INFO

KERN_SOH "6"

#define KERN_DEBUG

KERN_SOH "7"

可以在启动kernel 命令行那里定义需要打印的log等级,比如下面定义打印log等级是8,那么所有小于等于这个值的log level都将被打印,否则不打印。

BOARD_KERNEL_CMDLINE += loglevel=8

如果loglevel 定义成0,那么等级从

1至7的log将不被打印。

可以通过cat /proc/sys/kernel/printk

查看当前的log等级

如下,第一个值就是当前系统log等级。

cat /proc/sys/kernel/printk

0

7

1

7

可以重新设置系统log等级,如下。

echo

8 >

/proc/sys/kernel/printk

4). native 层log 打印:

使用LOGE, LOGI, LOGD, LOGV, LOGW接口打印log,一般默认只有LOGE是打开的,如需要打印别的log,需要在使用时定义#define LOG_NDEBUG 0或者干脆#undef NDEBUG

可见system/core/include/log/log.h中定义。

二、modem log

离线modem log保存也是很必要的,在场测过程,在遇到一些非毕现信号问题,都需要开启离线modem log。

不同的平台,不同的modem芯片,捕获modem log方法不太一样,大致流程都是打开对应的modem log端口,发送相应AT指令(如AT+TRACE=1或at+xsystrace=1)打开log,之后从端口读取log。

三、ANR log

Android默认如下情况将产生ANR:

l应用处理前台广播超过10秒

l应用处理后台广播超过60秒

l应用处理按键消息超过5秒

l应用或者系统启动一个服务超过10秒

所以处理广播和按键消息时不应该直接执行太耗时的动作,可以另外启动线程了执行耗时的动作。

产生ANR时在aplog中里找到相应的ANR log,从这里能看到ANR发生前后CPU的使用情况。如果CPU负载高,需要再看哪个进程引起的,是否读写IO,UI线程执行了耗时动作等;如果CPU负载不高,那可能是系统被死锁,死循环给block住了,需要从每个进程的stack信息中进一步分析。

E ActivityManager: ANR in com.google.android.googlequicksearchbox:search

E ActivityManager: CPU usage from 0ms to 8189ms later:

E ActivityManager:105% 11139/com.google.android.googlequicksearchbox:search: 96% user + 8.6% kernel / faults: 37407 minor 19 major

E ActivityManager: 52% TOTAL: 32% user + 19% kernel + 0.8% iowait + 0.2% softirq

E ActivityManager: CPU usage from 7600ms to 8144ms later:

E ActivityManager: 29% TOTAL: 26% user + 2.9% kernel

同时各进程执行stack保存在/data/anr/trace.txt目录下。一般搜索“held by”字符,看lock是被哪个线程占用了。然后再分析对应线程正在执行什么动作。

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by

thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

- waiting to lock

<0x1c75fa1d> (a com.android.server.am.ActivityManagerService)

held by thread 63

四、panic log

Panic log是分析kernel重启的重要手段,一般能显示重启原因,如空指针重启,狗重启,soft reset、hard rest、调用堆栈信息等。

在启动kernel时通过配置BOARD_KERNEL_CMDLINE += softlockup_panic=0开启关闭panic开关(0关1开)

也可以通过写设备节点来控制(/proc/sys/kernel/softlockup_panic)

panic log在/data/dontpanic目录下,如果这里没有保存下来,在

/data/syttem/dropbox/SYSTEM_LAST_KMSGxxx.txt.gz里也能看到。

手动触发panic命令:echo c > /proc/sysrq-trigger

Native层出现crash时产生tombstones log,保存在/data/tombstones目录下,里面保存了调用堆栈和寄存器信息,需要共享库符号表和addr2line工具来分析。

六、dropbox log

Dropbox收集了系统重启、crash、anr等信息,在分析相应问题的时候可以参考Dropbox目录下的对应文件。

在data/sytem/dropbox目录下。

七、monkey log

是跑monkey时产生的log,里面记录monkey运行过程的一些信息,比如时间点。Monkey跑停时可以根据monkey log里的时间点和aplog对应上。Monkey问题分析同时需要monkey log和aplog等log。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值