我的设备上经常出现“打开文件太多错误”错误(HTC Wildfire S,Android 2.3.5。)。我已经发现了一些我可能有内存泄漏的话题。问题是如何调试问题?如何找到哪个进程正在使用文件描述符而不释放它?
我的设备不是root用户 - 所以我想知道如何在非root设备上获取有关打开的描述符的信息。如果这不可能,请告诉我如何在Android模拟器上获取此类数据。
答案 0 :(得分:3)
我刚刚处理过这件事。 (SFAIK)OS是“太多打开的文件”。在任何Unix上,在终端中运行lsof
。设为lsof | less
,因为您不会相信有多少个打开的文件。这些天的应用程序都是文件疯狂。
无论如何,关闭一些应用程序,尽可能多,然后再试一次。其中一个罪魁祸首是adb
本身。我不知道它是否会关闭任何东西。因此,如果关闭某些应用程序没有帮助,请关闭Eclipse。然后在Unix终端中运行skill -9 adb
。其他操作系统将有其他杀毒工具。但是杀死adt,这可能(当然在Unix中)在关闭Eclipse之后仍然在后台徘徊。
如果这不起作用,那就太小了;去那里;并手动关闭这些文件。
答案 1 :(得分:0)
为了获得与文件本身一起打开的文件数量,您还可以使用以下命令:
lsof | grep USER | tee /dev/tty | wc -l
USER打开的文件总数将打印在输出的最后。
答案 2 :(得分:0)
您还可以运行类似
的内容 lsof | grep <pid>
查看您的应用正在使用的所有文件。将| wc -l
添加到最后以获得总计。