我的客户端有一个旧版本的uClinux,内核2.6.22,在Blackfin STAMP板上运行。主要应用程序分为14个进程,另外还有一个在板上运行的Web服务器。
我们看到的错误是,当VOIP应用程序似乎耗尽了文件句柄而无法创建新的套接字时,Web服务器一直保持快速运行。我已经尝试了我所知道的每一种调试技术。我有一个JTAG调试器,但内存对于调试符号来说太小了。我不能用Valgrind或类似的东西编译。任何猜测?
谢谢,
麦克
答案 0 :(得分:2)
你可能有文件描述符泄漏。无论如何,Valgrind都不是最好的追踪工具。
首先做'ls -lah / proc / pid / fd'。这将显示进程打开(尚未关闭)的文件描述符列表。 如果您确实有文件描述符泄漏,那么应该会看到很多条目。还应该立即明白你正在泄漏哪种类型的文件描述符(文件,套接字......)。
一旦您知道您将更好地了解代码中的哪个位置可以查找泄漏。
您的文件系统已满的事实可能是另一个提示。如果您的应用程序正在创建一个文件并将其删除,但没有关闭文件描述符,那么您可能会有一堆文件,这些文件在树中找不到但仍占用空间。在这种情况下,您将看到文件名(符号链接的目标)/ proc / pid / fd。