Дисковый профилировщик ввода-вывода для приложения C ++ в Linux - PullRequest
1 голос
/ 18 ноября 2011

Программа массово читает с диска, но я не знаю, какой файл он читает, и где в коде он читает.

Есть ли на linux какие-либо инструменты для мониторинга?

Схожий вопрос (windows): Профилировщик дискового ввода-вывода для существующих приложений

Ответы [ 2 ]

5 голосов
/ 18 ноября 2011

Итак, вы можете использовать: /proc/PID/fd или же lsof -p PID

чтобы узнать, какой файл использует ваш процесс.

например, с lsof -p 27666 (предположим, 27666 - PID программы a.out), вы можете увидеть это:

./a.out 22531 me    9w   REG   8,5   131072   528280 /home/me/tmp/test.db
./a.out 22531 me    9r   REG   8,5   131072   528280 /home/me/tmp/test2.db
4 голосов
/ 18 ноября 2011

Если система действительно занята IO, просто посмотрите на top, и вы увидите, что связанный с IO процесс обычно застревает в D-состоянии.

strace -c myprog - мой лучший друг с первой попытки ответить на общие вопросы «что делает мое приложение / где он проводит больше всего времени».Strace также может подключаться к запущенным процессам, поэтому вы можете наблюдать за программой во время ее работы.
Еще одна хорошая хитрость - вывести ее (с strace -o myprogrun.log) в файл журнала, а затем просмотреть ее с современным vim какэто делает очень хороший синтаксис работы, подсвечивающий журнал.Так проще найти вещи, так как вывод strace по умолчанию не очень удобен для восприятия человеком.

Важно помнить, что нужно регистрироваться на другом разделе / ​​наборе дисков, чем там, где проблема ввода-вывода!Не вызывайте дополнительных проблем с вводом-выводом, так как strace может генерировать много выходных данных.Для таких случаев я люблю использовать RAM-диски TmpFS или ZRAM.

...