应用句柄泄露分析实例

前两天项目紧张阶段报出来一个Monkey测试出现的句柄泄露问题

当然这类问题日志和抛出的异常肯定不是直接告诉你句柄泄露啦、哪里泄露啦,测试报出来的问题是

AndroidRuntime: java.lang.RuntimeException: Could not read input channel file descriptors from parcel.

不少人都见过吧,其实这个也差不多就是告诉你文件句柄有了问题,可能还会怀疑是不是系统有问题导致的,好吧,还需要其他佐证来分析。

继续在这个日志附近搜索,哟,发现了宝贝了。

还有两句比较明显的,基本上可以确认就是句柄泄露了。

Parcel  : dup() failed in Parcel::read, i is 0, fds[i] is -1, fd_count is 2, error: Too many open files 

08-30 05:52:02.633  5258  5258 E InputChannel-JNI: Error 24 dup channel fd 1011.

开始解把

先搜索Cursor关键字,毕竟cursor也是要占用句柄的,代码里面都有加close操作,排除

然后搜索关键字File、InputStream和OutStream看看是否有未关闭的,没有问题排除

还是没找到问题,只能祭出杀手锏了,根据日志显示的操作简单操作几次看看前后文件句柄变化主要是哪几个方面

shell命令adb shell ls -al /proc/pid/fd

进入应用就已经有四十好几个了,大部分都不知道是什么,猜也没什么意义,还是直接操作几下看看差别吧。

lrwx------ u0_a67 u0_a67 2016-09-02 16:32 0 -> /dev/null
lrwx------ u0_a67 u0_a67 2016-09-02 16:32 1 -> /dev/null
lr-x------ u0_a67 u0_a67 2016-09-02 16:32 10 -> /system/framework/core-libart.jar
lrwx------ u0_a67 u0_a67 2016-09-02 16:32 1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值