2013-12-02 3 views
0

У моего клиента есть старая версия uClinux, ядро ​​2.6.22, работающая на плате Blackfin STAMP. Основное приложение разделено на 14 процессов, плюс на сервере работает веб-сервер.Ошибка создания сокета Blackfin uClinux

Ошибка, которую мы видим, веб-сервер продолжает работать счастливо, пока приложение VOIP, похоже, не работает с файловыми дескрипторами и не может создавать новые сокеты. Я пробовал каждую технику отладки, о которой я знаю. У меня есть отладчик JTAG, но память слишком мала для символов отладки. Я не могу скомпилировать с Valgrind или что-то в этом роде. Какие-нибудь догадки?

Спасибо,

Майк

+0

О, когда я делаю «df» в нерабочей системе, иногда вижу, что/dev/mtdblock0 заполняется. Это смонтировано как корневая файловая система, что странно, потому что я думал, что MTD только для вспышки. Также есть mtdblock4, который установлен на/flash, который никогда не заполняется. – user3058904

ответ

2

Это, скорее всего, у вас есть утечка дескриптора файла. Valgrind - не лучший инструмент для отслеживания этого в любом случае.

Начало работы ls -lah/proc/pid/fd '. Это покажет вам список дескрипторов файлов, открытых (и еще не закрытых) процессом. Если у вас действительно есть утечка дескриптора файла, вы должны увидеть там много записей. Также должно быть сразу очевидно, какой тип дескриптора файла вы протекаете (файл, сокет, ...).

Как только вы знаете, что у вас будет лучшее представление о том, где в коде искать утечку.

То, что ваша файловая система заполнена, может быть еще одним намеком. Если ваше приложение создает файл и удаляет его, но не закрывает дескриптор файла, у вас может быть множество файлов, которые вы не найдете в дереве, но которые все еще едят пространство, висящее вокруг. В этом случае вы увидите имена файлов в (цель символических ссылок)/proc/pid/fd.

+0

Спасибо, я просмотрел/proc. Старые версии Linux немного странны в этой области, но я хочу (нужно) понять это. Я предполагаю, что это называется LinuxThreads, где pthread порождает целый процесс. Я так понимаю, это было заменено реальными потоками POSIX. – user3058904

+0

Это должен быть поток, не глобальный, дескриптор файла, поскольку веб-сервер все еще работает. Или я ошибаюсь? – user3058904

+0

Да, Linux ограничивает количество дескрипторов файлов, которые может выделить каждый процесс. –