lsof

Автор mihail_1, 24 октября 2013, 13:56:23

« назад - далее »

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

mihail_1

Для многопоточных процессов lsof показывает что каждый файл открыт каждым потоком. (например если в процессе 1000 потоков и каждый открыл по одному файлу lsof покажет 1000000 записей). А ресурсы выделяемые на открытие файла соответствуют количеству открытых файлов или количеству показываемых lsof записей?

mihail_1

Никто не понял вопроса или никто не знает ответа?

qupl

mihail_1, это должно быть справочной информацией. Если трудно, могу погуглить за Вас.  Кроме того есть исходники и практические тесты.

mihail_1

Поискать не трудно, трудно придумать по какой фразе можно найти ответ на русском.
А вот разобраться в исходниках линукса, думаю трудно.
Практические тесты показывают что выдача lsof растет пропорционально квадрату числа потоков и доростет до нескольких триллионов. Если под это действительно выделяются ресурсы это катастрофа. mysqldump всей базы уже не доходит до конца с сообщением о невозможности открытия очередного файла (незнаю по этой ли причине, но врятли ограничение можно увеличивать бесконечно)

qupl

mihail_1, пречитал еще раз первый пост, извиняюсь, действительно не сразу его понял. Если каждый поток действительно открывает файл, то кол-во ресурсов будет N*fc (где N - кол-во потоков, а fc - количество открытых файлов). Но потоки могут использовать и уже открытые другими потоками приложения файлы, тогда зависимость неизвестна.  А что показывает lsof с ключом +f g ?

mihail_1

Нет поток открывает только свой файл, но lsof показывает, что все потоки открыли все файлы. Но значит ли это что при открытии файла одним потоком он был открыт всеми остальными и под это выделены дополнительные ресурсы или значит что данный файл открыт одним потоком, но доступен остальным без дополнительных затрат?
(в моем приложении это не нужно, а как сделано в mysql не знаю)

lsof +f g выдал столько же записей, но появилась колонка в которой сказано что открыты они как большие для чтения и записи

qupl

Очепятка буква "g" должна быть большая
lsof +f G
Тогда для многопоточного приложения он покажет флаг использования файла. Посмотрите man по lsof и ключу +f.

Если количество открытых файлов постоянно растет не уменьшаясь, то где-то в коде ошибка (в вашем или какой-то библиотеки mysql - нужно искать).

mihail_1

        g       file flag abbreviations
        G       file flags in hexadecimal
Не совсем понял в чем принципиально разница?

Если файлы закрывать то уменьшается, а если не закрывать, то только растет.
(но отслежавать когда сколько миллионов записей выдаст lsof несколько трудоемко)

qupl

mihail_1, в случае g не выводится второй список после ";"   , может быть это частный случай, но у меня так.

Ключевое, что там выводится, флаг
ЦитироватьUSE       in use (multi-threaded)

mihail_1

G: 0x8002;0x0
g: RW,LG

Где должно быть USE?


mihail_1

Т.е. оно есть и это значит лишних ресурсов не тратится?