Автор Тема: lsof  (Прочитано 1911 раз)

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

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
lsof
« : 24 Октября 2013, 13:56:23 »
Для многопоточных процессов lsof показывает что каждый файл открыт каждым потоком. (например если в процессе 1000 потоков и каждый открыл по одному файлу lsof покажет 1000000 записей). А ресурсы выделяемые на открытие файла соответствуют количеству открытых файлов или количеству показываемых lsof записей?
 

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: lsof
« Ответ #1 : 27 Октября 2013, 22:14:43 »
Никто не понял вопроса или никто не знает ответа?
 

Оффлайн qupl

Re: lsof
« Ответ #2 : 28 Октября 2013, 06:34:35 »
mihail_1, это должно быть справочной информацией. Если трудно, могу погуглить за Вас.  Кроме того есть исходники и практические тесты.

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: lsof
« Ответ #3 : 28 Октября 2013, 10:06:27 »
Поискать не трудно, трудно придумать по какой фразе можно найти ответ на русском.
А вот разобраться в исходниках линукса, думаю трудно.
Практические тесты показывают что выдача lsof растет пропорционально квадрату числа потоков и доростет до нескольких триллионов. Если под это действительно выделяются ресурсы это катастрофа. mysqldump всей базы уже не доходит до конца с сообщением о невозможности открытия очередного файла (незнаю по этой ли причине, но врятли ограничение можно увеличивать бесконечно)
 

Оффлайн qupl

Re: lsof
« Ответ #4 : 28 Октября 2013, 11:16:05 »
mihail_1, пречитал еще раз первый пост, извиняюсь, действительно не сразу его понял. Если каждый поток действительно открывает файл, то кол-во ресурсов будет N*fc (где N - кол-во потоков, а fc - количество открытых файлов). Но потоки могут использовать и уже открытые другими потоками приложения файлы, тогда зависимость неизвестна.  А что показывает lsof с ключом +f g ?

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: lsof
« Ответ #5 : 28 Октября 2013, 13:34:31 »
Нет поток открывает только свой файл, но lsof показывает, что все потоки открыли все файлы. Но значит ли это что при открытии файла одним потоком он был открыт всеми остальными и под это выделены дополнительные ресурсы или значит что данный файл открыт одним потоком, но доступен остальным без дополнительных затрат?
(в моем приложении это не нужно, а как сделано в mysql не знаю)

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

Оффлайн qupl

Re: lsof
« Ответ #6 : 28 Октября 2013, 13:53:10 »
Очепятка буква "g" должна быть большая
lsof +f GТогда для многопоточного приложения он покажет флаг использования файла. Посмотрите man по lsof и ключу +f.

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

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: lsof
« Ответ #7 : 28 Октября 2013, 16:18:59 »
        g       file flag abbreviations
        G       file flags in hexadecimal
Не совсем понял в чем принципиально разница?

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

Оффлайн qupl

Re: lsof
« Ответ #8 : 28 Октября 2013, 16:26:37 »
mihail_1, в случае g не выводится второй список после ";"   , может быть это частный случай, но у меня так.

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

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: lsof
« Ответ #9 : 28 Октября 2013, 17:11:14 »
G: 0x8002;0x0
g: RW,LG

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

Оффлайн qupl

Re: lsof
« Ответ #10 : 28 Октября 2013, 20:49:16 »

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: lsof
« Ответ #11 : 28 Октября 2013, 21:00:34 »
Т.е. оно есть и это значит лишних ресурсов не тратится?
 

Теги: