Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android文件描述符泄漏调试_Java_Android_Linux Kernel_File Descriptor - Fatal编程技术网

Java Android文件描述符泄漏调试

Java Android文件描述符泄漏调试,java,android,linux-kernel,file-descriptor,Java,Android,Linux Kernel,File Descriptor,我们公司有很多在虚拟/真实设备上运行的ui测试。在运行一段时间后,测试随机崩溃,我认为这是文件描述符超过的结果:我使用了 ls/proc/${PID}/fd|wc-l和lsof-p${PID} 但这并没有多大帮助-lsof中的大多数行看起来像: 30015 u0_a104 678 sock 859560 socket:[859560] 30015 u0_a104 679 0000

我们公司有很多在虚拟/真实设备上运行的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/UTIL可以找到泄漏源


p.S.System.gc()没有任何帮助

我已经为这个问题研究了一段时间,希望与大家分享我的发现:

  • 文件描述符在Android中至少用于:

    • 网络套接字(或其他类型的文件)
    • 映射到内存文件
    • 线程-所以这是我的情况。见下文为什么
  • 如果您已经创建了HandlerThread,即使指向HandlerThread实例的最后一个链接将消失,该线程仍将工作并使用FileDescriptor

  • android中的线程可以看到:

    • 在“Java堆转储”内存分析工具中——我已经看到运行IntsRunning测试时超过500个线程——它们“吃掉”了所有文件描述符
    • 通过android设备上的终端
      adb外壳ps-t
      或仅仅
      ps-t

  • 您正在泄漏文件、套接字或选择器。是的,但是Java中的哪些类使用它们?如何找到它们?另一种查看线程的方法是通过Android Studio的CPU分析器。