在我的 android 应用程序中,我收到“打开的文件太多”异常。当我执行 lsof 时,我会得到一长串(而且还在不断增长的)开放管道。但是在我的情况下,两个管道端点都在我的应用程序中。另一个奇怪的事情:就在拥有两个管道之前,我总是有一个打开的套接字连接。
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 79 ??? ??? ??? ??? socket:[3817]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 80 ??? ??? ??? ??? pipe:[4583]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 81 ??? ??? ??? ??? pipe:[4583]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 82 ??? ??? ??? ??? socket:[4593]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 83 ??? ??? ??? ??? pipe:[4594]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 84 ??? ??? ??? ??? pipe:[4594]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 85 ??? ??? ??? ??? socket:[4600]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 86 ??? ??? ??? ??? pipe:[4601]
07-05 05:22:30.790 W/TAG ( 481): me.app 481 u0_a69 87 ??? ??? ??? ??? pipe:[4601]
我很确定我关闭了所有进程和流。为此,我多次检查了该应用程序并运行了 PMD 和 FindBugs。我使用 HttpUrlConnection 进行 HTTPS 通信,我也很确定我断开了所有连接,以便可以重用它们。
有谁知道,那些管道可能是什么(或者我怎么能找到)?
关于套接字(我不知道这是否相关):当我运行 netstat 时,我得到了很多处于 CLOSE_WAIT 状态的套接字:
tcp6 0 24 ::ffff:10.83.12.3:39006 ::ffff:62.75.242.64:443 CLOSE_WAIT
tcp6 0 24 ::ffff:10.83.12.3:53782 ::ffff:62.75.242.64:443 CLOSE_WAIT
tcp6 0 24 ::ffff:10.83.12.3:49433 ::ffff:62.75.242.64:443 CLOSE_WAIT
tcp6 0 24 ::ffff:10.83.12.3:41807 ::ffff:62.75.242.64:443 CLOSE_WAIT
tcp6 0 24 ::ffff:10.83.12.3:34892 ::ffff:62.75.242.64:443 CLOSE_WAIT
tcp6 0 24 ::ffff:10.83.12.3:53105 ::ffff:62.75.242.64:443 CLOSE_WAIT
tcp6 0 24 ::ffff:10.83.12.3:44466 ::ffff:62.75.242.64:443 CLOSE_WAIT
如上所述,我在 Android 端使用 HttpUrlConnection。服务器是运行 PHP 的 Apache 服务器。SSL 证书有效并由 PositiveSSL 颁发。
这可能是网络问题吗?