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,问题就出在这里。至于具体什么原因,不知道怎么分析了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值