赞
踩
一、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
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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。