怎么选择一家好的网站建设公司,北京建设网站公司网站,最美情侣免费高清视频,迈若网站建设每个进程的可用Binder内存大小是 1M-8KB 也就是900多KB 事情的起因的QA压测过程发生进程号变更#xff0c;怀疑APP被杀掉过#xff0c;于是开始看日志#xff08;实际后来模拟的时候可以发现app确实被杀掉了#xff09; APP的压测平台会上报进程号变更时间点#xff0c;发… 每个进程的可用Binder内存大小是 1M-8KB 也就是900多KB 事情的起因的QA压测过程发生进程号变更怀疑APP被杀掉过于是开始看日志实际后来模拟的时候可以发现app确实被杀掉了 APP的压测平台会上报进程号变更时间点发现是在临晨1220分先大概确定在哪个日志文件去找关键信息  一开始怀疑是crash然后就在日志中过滤crash关键字过滤出日志  BroadcastQueue: Can’t deliver broadcast to com.baidu.launcher (pid 951). Crashing it ProcessRecord: ProcessRecord.kill, reason  scheduleCrash for ‘can’t deliver broadcast’ failed noisy  true killedByAm  false pid  951 com.baidu.launcher 目前来看是由于广播发不出去导致系统kill了APP 
于是先网上搜了下scheduleCrash看下是否有前人的智慧留存运气不错有相似情况原因是Binder通信申请内存不时候内存不足导致的报错 
https://cloud.tencent.com/developer/article/1639706 
于是下一步就过滤binder关键字 依然是看kill前后时间段的binder打印 JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size  124) 有很多这个打印这个是什么时候打印的呢查了一下JavaBinder发现没有这个类网上搜了下 
https://blog.csdn.net/xiaoxiaosunzhao/article/details/107325352 
发现这个打印是在android_util_Binder.cpp,于是用Google提供的在线源码查看工具Android Code Search搜了下发现打印位置 报这个错误的时候根据代码逻辑有2个原因一个是binder transaction失败而且传递数据大小超过限制 200*1024 也就是200KB 还有一个就是AIDL接口服务挂了那么现在就可以过滤下是哪个原因 TransactionTooLargeException DeadObjectException 通过过滤这两个关键字发现是第二个原因 可以看到BtGatt也在打印错误这是BLE蓝牙的相关打印结果压测场景是按住遥控器说话这个过程会通过遥控器收音发送语音数据给设备所以确定是这个操作引发。这个内存不足的猜想要么是每次传递数据过大要么就段时间传递的太多了导致这时候广播通知跨进程发现共享内存不足kill APP通过Log发现parcel size  160字节应该不是太大导致于是开始查看传递次数发现出问题这次收音持续了10分钟多远超过脚本设定的每20S收音2S的情况。但是也考虑到这种异常情况和binder传递数据的限制决定加上了收音时间限制和数据积攒一定数量再发送一次的操作降低跨进程频率。 如果怀疑是这个原因可以直接过滤parcel字段parcel是跨进程读写的中间人系统在写入出问题的时候会带上这个字段的打印 后来去模拟复现这个问题创建1个Activity1个Serivice设置process:remote执行在其他进程通过AIDL的方式跨进程开启2个线程循环向写入Service写入字节数组发现出错的打印基本一致于是就确定了之前的猜测。