我的公司我们有很多ui测试,它们运行在虚拟/真实设备上。运行一段时间之后测试随机崩溃,我认为这是文件描述符超出的结果:我用了
ls /proc/${PID}/fd | wc -l
和lsof -p ${PID}
但它没有多大帮助 - lsof中的大多数行看起来像:
30015 u0_a104 678 sock 859560 socket:[859560]
30015 u0_a104 679 0000 0,8 4539 anon_inode:[eventpoll]
30015 u0_a104 680 0000 0,8 4539 anon_inode:[eventfd]
30015 u0_a104 681 0000 0,8 4539 anon_inode:[eventfd]
30015 u0_a104 682 0000 0,8 4539 anon_inode:[eventpoll]
30015 u0_a104 683 0000 0,8 4539 anon_inode:[eventfd]
30015 u0_a104 684 0000 0,8 4539 anon_inode:[eventpoll]
30015 u0_a104 685 0000 0,8 4539 anon_inode:[eventfd]
所以我的问题是:是否有任何android / java / linux instruments / utils可以找到泄漏的源?
P.S。 System.gc()没有帮助
答案 0 :(得分:5)
我已经研究过这个问题了一段时间,并希望分享我发现的内容:
文件描述符在Android中至少用于:
如果您已经创建了HandlerThread,即使HandlerThread实例的最后一个链接将消失,线程仍然可以使用并使用FileDescriptor
可以看到android中的线程:
adb shell ps -t
或仅ps -t