问题描述
国庆后正式辞职了,在交接完成前,也就摸摸鱼或者帮同事分析一些Jira上严重的bug,同事负责的车载项目已经进行小批量试产,Monkey 测试的强度也开始提高,然后不出意外的话是要出意外了,一个车辆核心功能的 service 在高强度的 monkey 测试中几乎必挂。
出问题的 service 负责车辆『数据埋点』通信的业务,车机中几十个应用和服务都需要经过这个 service 来向 『T-box』 汇报埋点数据,IPC 通信方式使用经典的 AIDL 实现。
完整的日志如下:
01-01 13:36:45.936 0 0 I binder : release 1684:1718 transaction 57988729 in, still active
01-01 13:36:45.936 0 0 I binder : send failed reply for transaction 57988729 to 3135:3254
09-30 21:53:02.514 1684 1718 E AndroidRuntime: FATAL EXCEPTION: Binder:1684_2
09-30 21:53:02.514 1684 1718 E AndroidRuntime: Process: com.xxx.xxx.xxxservice, PID: 1684
09-30 21:53:02.514 1684 1718 E AndroidRuntime: java.lang.AssertionError: Binder ProxyMap has too many entries: 20691 (total), 20691 (uncleared), 20691 (uncleared after GC). BinderProxy leak?
09-30 21:53:02.514 1684 1718 E AndroidRuntime: at android.os.BinderProxy$ProxyMap.set(BinderProxy.java:230)
09-30 21:53:02.514 1684 1718 E AndroidRuntime: at android.os.BinderProxy.getInstance(BinderProxy.java:432)
09-30 21:53:02.514 1684 1718 E AndroidRuntime: at android.os.Parcel.nativeReadStrongBinder(Native Method)
09-30 21:53:02.514 1684 1718 E AndroidRuntime: at android.os.Parcel.readStrongBinder(Parcel.java:2483)
09-30 21:53:02.514

本文通过一个车载项目的案例,详细解析了Binder通信机制中的内存泄露问题及其解决办法。

1473

被折叠的 条评论
为什么被折叠?



