我的客户有一个旧版本的uClinux,内核2.6.22,在Blackfin戳板上运行。主应用程序被分成14个进程,另外还有一个运行在主板上的The服务器。
我们看到的bug是,当VOIP应用程序似乎耗尽了文件句柄并且无法创建新的套接字时,we服务器一直在愉快地运行。我已经尝试了我所知道的每种调试技术。我有一个JTAG调试器,但是内存对于调试符号来说太小了。我不能用Valgrind或类似的东西编译。有没有猜到?
谢谢,
麦克
发布于 2013-12-03 06:02:12
很可能你有一个文件描述符泄漏。无论如何,Valgrind都不是最好的追踪工具。
首先执行'ls -lah /proc/pid/fd‘。这将显示进程打开(和尚未关闭)的文件描述符的列表。如果你真的有一个文件描述符泄漏,你应该看到那里有很多条目。你泄漏的是哪种类型的文件描述符(文件、套接字等)也应该一目了然。
一旦你知道了这一点,你就会更好地知道在代码中的什么地方寻找泄漏。
文件系统已满的事实可能是另一个提示。如果您的应用程序正在创建一个文件并将其删除,但没有关闭文件描述符,那么您可能会有一堆文件,这些文件在树中找不到,但它们仍然会占用周围的空间。在这种情况下,您将在(符号链接的目标) /proc/pid/fd中看到文件名。
https://stackoverflow.com/questions/20337625
复制相似问题