android swt问题分析,Android系统跑monkey测试发生SWT system_server问题log简单分析

首先从手机导出DB文件,使用MediatekLogView解析db.fatal.00.SWT.dbg,打开__exp_main.txt文件,可以看到Fatal的详细信息。

Exception Class: SWT

Exception Type: system_server_watchdog

Current Executing Process:

system_server

Trigger time:[2010-01-21 06:51:57.766112] pid:937

Backtrace:

Process: system_server

Subject: surfaceflinger hang.

Build: Infinix/H613IN/Infinix-X5516:9/PPR1.180610.011/E-IN-181105V47:user/release-keys

......

----- pid 937 at 2010-01-21 06:51:52 -----

Cmd line: system_server

异常的类型是system_server_watchdog,说明system_server在某个地方卡住了,没有及时喂狗。

首先要做的是:确认线程关系

确认线程状态为“Blocked”,然后通过关键字“held by”来进一步确认是哪一个线程拿住了锁

"main" prio=5 tid=1 Blocked

| group="main" sCount=1 dsCount=0 flags=1 obj=0x745e11f0 self=0xac95e000

| sysTid=937 nice=-2 cgrp=default sched=0/0 handle=0xb1080494

| state=S schedstat=( 1019835302578 1462214227781 2944063 ) utm=64697 stm=37286 core=0 HZ=100

| stack=0xbe070000-0xbe072000 stackSize=8MB

| held mutexes=

at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:22781)

- waiting to lock <0x039e9a6d> (a com.android.server.am.ActivityManagerService) held by thread 80

at android.app.ActivityManager.broadcastStickyIntent(ActivityManager.java:4078)

at android.app.ActivityManager.broadcastStickyIntent(ActivityManager.java:4068)

at com.android.server.BatteryService.lambda$sendBatteryChangedIntentLocked$0(BatteryService.java:1390)

at com.android.server.-$$Lambda$BatteryService$2x73lvpB0jctMSVP4qb9sHAqRPw.run(lambda:-1)

at android.os.Handler.handleCallback(Handler.java:873)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loop(Looper.java:193)

at com.android.server.SystemServer.run(SystemServer.java:538)

at com.android.server.SystemServer.main(SystemServer.java:318)

at java.lang.reflect.Method.invoke(Native method)

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:891)

在上述中:线程的名字(“main”),线程优先级(“prio”), 线程id(“tid”) 以及线程的类型(“Blockled”)。线程所述的线程组 (“main”), 线程被正常挂起的次数(“sCount”),线程因调试而挂起次数(“dsCount ”),当前线程所关联的java线程对象(“obj ”)以及该线程本身的地址(“self ”)。该线程在linux系统下的本地线程id (“sysTid ”),线程的调度优先级(“nice ”),调度策略(sched ) ,优先组属(cgrp=no-cpu-subsys)以及处理函数地址(“handle”)。

main线程处于Blocked状态,通过这一句log可以知:waiting to lock <0x039e9a6d> (a com.android.server.am.ActivityManagerService) held by thread 80,它在等锁0x039e9a6d,这个锁被thread 80持有。held by thread 后面跟的是tid,通过搜索tid=80查找下一个线程的持锁情况。

"LazyTaskWriterThread" prio=5 tid=80 Blocked

| group="main" sCount=1 dsCount=0 flags=1 obj=0x13fcafc0 self=0x938ebe00

| sysTid=1061 nice=-2 cgrp=default sched=0/0 handle=0x8e815970

| state=S schedstat=( 116141402288 237772078608 277327 ) utm=5138 stm=6476 core=0 HZ=100

| stack=0x8e712000-0x8e714000 stackSize=1042KB

| held mutexes=

at com.android.server.wm.WindowManagerService.removeObsoleteTaskFiles(WindowManagerService.java:3866)

- waiting to lock <0x0db2e19f> (a com.android.server.wm.WindowHashMap) held by thread 36

at com.android.server.am.TaskPersister$LazyTaskWriterThread.run(TaskPersister.java:658)

- locked <0x039e9a6d> (a com.android.server.am.ActivityManagerService)

可以看到 tid=80的线程在等另一个锁0x0db2e19f,他被thread 36持有。所以接下来看一下thread 36在做什么。

"android.anim" prio=5 tid=36 Native

| group="main" sCount=1 dsCount=0 flags=1 obj=0x13c80f40 self=0xa0717400

| sysTid=1008 nice=-10 cgrp=default sched=0/0 handle=0x93bff970

| state=S schedstat=( 5690241391637 2434501191174 6606436 ) utm=491966 stm=77058 core=2 HZ=100

| stack=0x93afc000-0x93afe000 stackSize=1042KB

| held mutexes=

kernel: binder_thread_read+0x106c/0x1454

kernel: binder_ioctl_write_read.constprop.23+0x220/0x458

kernel: binder_ioctl+0x68c/0x824

kernel: do_vfs_ioctl+0xb8/0x9bc

kernel: SyS_ioctl+0x74/0x84

native: #00 pc 0005380c /system/lib/libc.so (__ioctl+8)

native: #01 pc 000219f3 /system/lib/libc.so (ioctl+30)

native: #02 pc 0003d3f5 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+204)

native: #03 pc 0003dde3 /system/lib/libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*)+26)

native: #04 pc 0003713d /system/lib/libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+36)

native: #05 pc 000597ab /system/lib/libgui.so (android::BpSurfaceComposer::captureLayers(android::spconst&, android::sp*, android::Rect const&, float, bool)+118)

native: #06 pc 000672dd /system/lib/libgui.so (android::ScreenshotClient::captureChildLayers(android::spconst&, android::Rect, float, android::sp*)+56)

native: #07 pc 000a5ddf /system/lib/libandroid_runtime.so (android::nativeCaptureLayers(_JNIEnv*, _jclass*, _jobject*, _jobject*, float)+162)

at android.view.SurfaceControl.nativeCaptureLayers(Native method)

at android.view.SurfaceControl.captureLayers(SurfaceControl.java:1344)

at com.android.server.wm.TaskSnapshotController.snapshotTask(TaskSnapshotController.java:268)

at com.android.server.wm.TaskSnapshotController.snapshotTasks(TaskSnapshotController.java:180)

at com.android.server.wm.TaskSnapshotController.handleClosingApps(TaskSnapshotController.java:154)

at com.android.server.wm.TaskSnapshotController.onTransitionStarting(TaskSnapshotController.java:134)

at com.android.server.wm.WindowSurfacePlacer.handleAppTransitionReadyLocked(WindowSurfacePlacer.java:336)

at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:615)

at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:207)

at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:155)

at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:145)

at com.android.server.wm.WindowSurfacePlacer.lambda$new$0(WindowSurfacePlacer.java:118)

- locked <0x0db2e19f> (a com.android.server.wm.WindowHashMap)

at com.android.server.wm.-$$Lambda$WindowSurfacePlacer$4Hbamt-LFcbu8AoZBoOZN_LveKQ.run(lambda:-1)

at android.os.Handler.handleCallback(Handler.java:873)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loop(Looper.java:193)

at android.os.HandlerThread.run(HandlerThread.java:65)

at com.android.server.ServiceThread.run(ServiceThread.java:44)

tid=36线程的状态为Native,问题就出在这里。至于具体什么原因,不知道怎么分析了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值