1 问题背景:
产线和测试组低概率出现一些冻屏,当时拿到测试组的手机,经过定位发现手机冻屏的原因是debuggerd64一直处于阻塞状态,发现重启一下debuggerd64进程手机就恢复了。当时定位只看到debuggerd64位进程一直处于unix_stream_connect连接状态,并没有想到更多的线索。
1.1 弯路和想当然:
当时第一眼认为是google如下问题的引入的:当时我们跟google沟通,让他们帮忙解决了system_server在dump mediaserver模式错误的问题,google的改法是从debuggerd64进程里面redirect 32bit debuggerd,中间用了socket。
https://android-review.googlesource.com/#/c/123592/
https://android-review.googlesource.com/#/c/123572/
https://android-review.googlesource.com/#/c/124120/
这块代码进行了重新reveiw和压力测试,并没有发现异常,奇怪?
1.2 问题定位:
后来由于时间的原因,一直没有在定位。产线和测试组仍旧低概率发现由于此原因导致冻屏;
曾经发现当手机在emmc写测试大io状态下,更容易复现。写了一些压力apk去模拟,但是也没有复现出来。
2015/6/24号,测试组又发生了一次冻屏,这次有时间好好思考一下为什么:
首先看了看手机debuggerd64进程的状态,仍旧是阻塞状态,
cat /proc/393/stack
[<0000000000000000>] __switch_to+0x70/0x7c
[<0000000000000000>] unix_wait_for_peer+0x94/0xc0
[<0000000000000000>] unix_stream_connect+0x148/0x424
[<0000000000000000>] SyS_connect+0x78/0xc0
[<0000000000000000>] cpu_switch_to+0x48/0x4c
[<0000000000000000>] 0xffffffffffffffff
unix_stream_connect这个东西永远不返回,如果发生tombstone,watchdog,anr在dump stack的时候都会通过debuggerd64进行stack,如果这个一直阻塞,会阻塞发生问题的进程:
root 392 1 2156 996 00a7156c f76fa9cc S /system/bin/debuggerd
root 393 1 4176 1552 00b3b3c4 855eacd8 S /system/bin/debuggerd64
产线和测试组低概率出现一些冻屏,当时拿到测试组的手机,经过定位发现手机冻屏的原因是debuggerd64一直处于阻塞状态,发现重启一下debuggerd64进程手机就恢复了。当时定位只看到debuggerd64位进程一直处于unix_stream_connect连接状态,并没有想到更多的线索。
1.1 弯路和想当然:
当时第一眼认为是google如下问题的引入的:当时我们跟google沟通,让他们帮忙解决了system_server在dump mediaserver模式错误的问题,google的改法是从debuggerd64进程里面redirect 32bit debuggerd,中间用了socket。
https://android-review.googlesource.com/#/c/123592/
https://android-review.googlesource.com/#/c/123572/
https://android-review.googlesource.com/#/c/124120/
这块代码进行了重新reveiw和压力测试,并没有发现异常,奇怪?
1.2 问题定位:
后来由于时间的原因,一直没有在定位。产线和测试组仍旧低概率发现由于此原因导致冻屏;
曾经发现当手机在emmc写测试大io状态下,更容易复现。写了一些压力apk去模拟,但是也没有复现出来。
2015/6/24号,测试组又发生了一次冻屏,这次有时间好好思考一下为什么:
首先看了看手机debuggerd64进程的状态,仍旧是阻塞状态,
cat /proc/393/stack
[<0000000000000000>] __switch_to+0x70/0x7c
[<0000000000000000>] unix_wait_for_peer+0x94/0xc0
[<0000000000000000>] unix_stream_connect+0x148/0x424
[<0000000000000000>] SyS_connect+0x78/0xc0
[<0000000000000000>] cpu_switch_to+0x48/0x4c
[<0000000000000000>] 0xffffffffffffffff
unix_stream_connect这个东西永远不返回,如果发生tombstone,watchdog,anr在dump stack的时候都会通过debuggerd64进行stack,如果这个一直阻塞,会阻塞发生问题的进程:
root 392 1 2156 996 00a7156c f76fa9cc S /system/bin/debuggerd
root 393 1 4176 1552 00b3b3c4 855eacd8 S /system/bin/debuggerd64