lsof + can't identify protocol

Автор Dexter, 10 Июня 2010, 17:01

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

Dexter

Есть у нас программа, созданная нашими разработчиками на c++. При выводе lsof видно, что она открывает ненормально огромное количество файлов,
TS2111    553 vadim 1408u  sock     0,5           7571967 can't identify protocol
TS2111    553 vadim 1409u  sock     0,5           7572028 can't identify protocol
TS2111    553 vadim 1410u  sock     0,5           7572113 can't identify protocol
TS2111    553 vadim 1411u  sock     0,5           7572164 can't identify protocol
TS2111    553 vadim 1412u  sock     0,5           7572364 can't identify protocol
TS2111    553 vadim 1413u  sock     0,5           7572553 can't identify protocol
TS2111    553 vadim 1414u  sock     0,5           7572557 can't identify protocol
TS2111    553 vadim 1415u  sock     0,5           7572757 can't identify protocol
TS2111    553 vadim 1416u  sock     0,5           7572974 can't identify protocol
TS2111    553 vadim 1417u  sock     0,5           7583708 can't identify protocol
TS2111    553 vadim 1418u  sock     0,5           7583935 can't identify protocol
TS2111    553 vadim 1419u  sock     0,5           7584001 can't identify protocol
TS2111    553 vadim 1420u  sock     0,5           7584131 can't identify protocol

За день их количество вырастает до 400 000, не смотря на:
ts:~/ # cat /proc/sys/fs/file-max
131072

Что это может быть? У меня сначала мысль была, что программа не закрывает неиспользуемые соединения. Однако, к нам столько просто не подключаются.

Iskander

Ошибка в программе? Надо смотреть как открываются файлы.
Любовь и массовые расстрелы спасут мир.

Dexter

Цитата: Iskander от 11 Июня 2010, 10:20Ошибка в программе? Надо смотреть как открываются файлы.
Мне вот, что интересно:
Ограничения на открытие файлов в системе меньше, чем открыто этих вот непонятных. Значит это не файлы, а что-то еще или может недофайлы или какие-нибудь полуфайлы. Далее я полез в /proc/PID/fd, где и лежит все это гадство. Показано все таким образом. Кусок:

lrwx------ 1 vadim users 64 2010-06-11 09:00 90 -> socket:[9079785]
lrwx------ 1 vadim users 64 2010-06-11 09:00 91 -> socket:[9079838]
lrwx------ 1 vadim users 64 2010-06-11 09:00 92 -> socket:[9079890]
lrwx------ 1 vadim users 64 2010-06-11 09:00 93 -> socket:[9079955]
lrwx------ 1 vadim users 64 2010-06-11 09:00 94 -> socket:[9080003]
lrwx------ 1 vadim users 64 2010-06-11 09:00 95 -> socket:[9080050]
lrwx------ 1 vadim users 64 2010-06-11 09:00 96 -> socket:[9080105]
lrwx------ 1 vadim users 64 2010-06-11 09:00 97 -> socket:[9080153]
lrwx------ 1 vadim users 64 2010-06-11 09:00 98 -> socket:[9080199]
lrwx------ 1 vadim users 64 2010-06-11 09:00 99 -> socket:[9080243]

Среди этой кучи непонятно чего, была выявлна работа с записью логов программы: типа:

l-wx------ 1 vadim users 64 2010-06-11 09:00 281 -> /home/vadim/TS2111/logs/reps.20100611
l-wx------ 1 vadim users 64 2010-06-11 09:00 282 -> /home/vadim/TS2111/ssl/logs/115b02/88_204_153_70_crt.20100611
l-wx------ 1 vadim users 64 2010-06-11 09:00 283 -> /home/vadim/TS2111/ssl/logs/115b02/88_204_153_70.err
l-wx------ 1 vadim users 64 2010-06-11 09:00 284 -> /home/vadim/TS2111/ssl/logs/115b02/88_204_153_70.sess

Iskander

11 Июня 2010, 11:02 #3 Последнее редактирование: 11 Июня 2010, 11:05 от Iskander
Цитата: Dexter от 11 Июня 2010, 10:32Мне вот, что интересно:
Ограничения на открытие файлов в системе меньше, чем открыто этих вот непонятных.
Тут есть небольшая хитрость. sys.fs.file-max показывает максимальное число файловых дескрипторов. А lsof - число открытых файлов. Собственно, файл программа может держать открытым, а дескриптора у него нет (подробнее к примеру здесь)
Цитата: Dexter от 11 Июня 2010, 10:32Значит это не файлы, а что-то еще или может недофайлы или какие-нибудь полуфайлы. Далее я полез в /proc/PID/fd, где и лежит все это гадство. Показано все таким образом. Кусок:
А вот там уже лежат дескрипторы.

Цитата: Dexter от 11 Июня 2010, 10:32Среди этой кучи непонятно чего, была выявлна работа с записью логов программы: типа:

l-wx------ 1 vadim users 64 2010-06-11 09:00 281 -> /home/vadim/TS2111/logs/reps.20100611
l-wx------ 1 vadim users 64 2010-06-11 09:00 282 -> /home/vadim/TS2111/ssl/logs/115b02/88_204_153_70_crt.20100611
l-wx------ 1 vadim users 64 2010-06-11 09:00 283 -> /home/vadim/TS2111/ssl/logs/115b02/88_204_153_70.err
l-wx------ 1 vadim users 64 2010-06-11 09:00 284 -> /home/vadim/TS2111/ssl/logs/115b02/88_204_153_70.sess
А тут что не так?
Любовь и массовые расстрелы спасут мир.

Dexter

11 Июня 2010, 11:15 #4 Последнее редактирование: 11 Июня 2010, 11:17 от Dexter
Цитата: Iskander от 11 Июня 2010, 11:02А тут что не так?
Тут все так. Отправил программистам, куда копать.

В том-то и дело. Там лежит огромное количество дескрипторов.

Iskander

Я конечно не могу сказать точно, надо плотно с кодом ковыряться, но такое ощущение что у вас что-то с менеджером потоков намудрено (Как я понимаю это сетевая служба/fcgi - что то в этом роде).
Любовь и массовые расстрелы спасут мир.