system_server 重启问题,请binder大神出马
沧海一粟之 2016-06-21 04:03:02 system_server 重启,因为binder线程长时间没有处理完binder请求并且达到最大binder个数,导致watchdog把他reset了。如下是log,所有binder线程栈都是如下这样,完全一样。我的疑问是:
第一,pc指针是kernel的“binder_thread_read+0x417/0xd7b”,这里0x471是基于函数的偏移,后面/0xd7b是什么东西?
第二,所有线程都是这样,说明所有线程都阻塞在这,说明这是一个阻塞操作,并且,并且,这是一个非函数的阻塞,因为如果是函数,最后pc就不是在binder_thread_read函数里面了。
第三,这也不是死锁,因为这里binder锁也是个函数,如果是阻塞在锁,最后pc应该停留在锁函数里面
第三,基于第二点,问题是我在binder_thread_read函数内并没有发现有这样的阻塞啊?
"Binder:2928_6" prio=5 tid=77 Native
| group="main" sCount=1 dsCount=0 obj=0x137ff670 self=0xd8c61f00
| sysTid=3574 nice=0 cgrp=default sched=0/0 handle=0xd637f910
| state=S schedstat=( 39575585087 28168991843 202072 ) utm=2632 stm=1325 core=2 HZ=100
| stack=0xd6283000-0xd6285000 stackSize=1014KB
| held mutexes=
kernel: binder_thread_read+0x417/0xd7b
kernel: binder_ioctl+0x6ec/0x8b0
kernel: compat_sys_ioctl+0xc0/0x13e0
kernel: ia32_sysret+0x0/0x5
native: #00 pc ffffe43e [vdso] (__kernel_vsyscall+14)
native: #01 pc 00086f1c /system/lib/libc.so (__ioctl+28)
native: #02 pc 00031a97 /system/lib/libc.so (ioctl+71)
native: #03 pc 000478a7 /system/lib/libbinder.so (_ZN7android14IPCThreadState14talkWithDriverEb+343)
native: #04 pc 000488f2 /system/lib/libbinder.so (_ZN7android14IPCThreadState15waitForResponseEPNS_6ParcelEPi+370)
native: #05 pc 000485b7 /system/lib/libbinder.so (_ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j+199)
native: #06 pc 0003a835 /system/lib/libbinder.so (_ZN7android8BpBinder8transactEjRKNS_6ParcelEPS1_j+85)
native: #07 pc 000e8540 /system/lib/libandroid_runtime.so (???)
native: #08 pc 0105bbd1 /data/dalvik-cache/x86/system@framework@boot.oat (Java_android_os_BinderProxy_transactNative__ILandroid_os_Parcel_2Landroid_os_Parcel_2I+221)
at android.os.BinderProxy.transactNative(Native method)
at android.os.BinderProxy.transact(Binder.java:615)
at android.app.ApplicationThreadProxy.dumpMemInfo(ApplicationThreadNative.java:1360)
at com.android.server.am.ActivityManagerService.dumpApplicationMemoryUsage(ActivityManagerService.java:15994)
at com.android.server.am.ActivityManagerService$MemBinder.dump(ActivityManagerService.java:2486)
at android.os.Binder.doDump(Binder.java:409)
at android.os.Binder.dump(Binder.java:396)
at android.os.Binder.onTransact(Binder.java:347)
at android.os.Binder.execTransact(Binder.java:565)