1.Watchdog是什么?
Android Watchdog主要是检测system server重要线程状态(main,android io,android display ,Activitymanager,android fg,android bg等线程 )的一种机制。发生Watchdog时会触发Android重启来使系统恢复。Watchdog是SystemServer的一个线程(class Watchdog extends Thread),检测system server重要线程的锁状态和消息是否阻塞,假如有线程block了60s那么就会触发watchdog timeout flow。
2.Watchdog代码基本介绍
可以在http://androidxref.com/搜索源码,看Watchdog.java文件
3.原因分析
(1)手机性能影响主要一下:
cpu使用高 --查看cpu使用,看是否有问题
low memory --通过kernel log搜索lowmemorykiller看cache和free的内存是否够,是否有memory泄露
emmc问题(io文件)--block的trace应该在io操作时,可以kernellog搜索是否有emmc错误
dump log --在发生anr之前系统在dump log导致花费时间
object leakage --比如fd leak,window leakage,service leakage,receiver leakage,window leakage
(2)非性能影响,可能原因如下,看backtrace来分析
死锁
systemserver binder用完--unavalialbebinder(表示binder耗尽)
4.分析步骤
1.确认是否为watchdog问题--event log搜索"Blocked in"或者"Watchdog" device log搜索"Blocked in",并且找到出问题的blocked thread。
2.查看下device log里面基本trace和cpu使用信息
3.搜索"Cmd line: system_server"检查30s(watchdog half)和60s(watchdog)的trace,假如trace打印的不一样,代表是系统整体慢导致,
4.不是系统性能导致,查看trace发现主要原因
5.可以看的还有,搜索4后出问题的线程log,可以搜索“”pid tid“”,来看是否有线索,搜索sysrq来看thread状态和trace,比如可以看是否在持有mutex锁,在做binder_ioclt操作等等,或者是否处在D状态(不可中断的异常状态)