0

我的客户有一个旧版本的 uClinux,内核 2.6.22,在 Blackfin STAMP 板上运行。主应用程序分为 14 个进程,另外还有一个网络服务器在板上运行。

我们看到的错误是,网络服务器一直在愉快地运行,而 VOIP 应用程序似乎用完了文件句柄并且无法创建新的套接字。我已经尝试了我所知道的所有调试技术。我有一个 JTAG 调试器,但内存对于调试符号来说太小了。我不能用 Valgrind 或类似的东西编译。有什么猜测吗?

谢谢,

麦克风

4

1 回答 1

2

很可能您遇到了文件描述符泄漏。无论如何,Valgrind 并不是追踪它的最佳工具。

首先执行“ls -lah /proc/ pid /fd”。这将向您显示该进程打开(但尚未关闭)的文件描述符列表。如果你真的有文件描述符泄漏,你应该在那里看到很多条目。您泄漏的文件描述符类型(文件,套接字,...)也应该立即显而易见。

一旦您知道您将更好地了解在代码中查找泄漏的位置。

您的文件系统已满这一事实可能是另一个提示。如果您的应用程序正在创建一个文件并删除它,但没有关闭文件描述符,那么您可能会在树中找到一堆文件,但它们仍然会占用周围的空间。在这种情况下,您将在/proc/ pid /fd 中(符号链接的目标)中看到文件名。

于 2013-12-02T22:02:12.353 回答