Моя ситуация такова, что время от времени определенный процесс (в данном случае это Thunderbird) не реагирует на ввод пользователя в течение минуты или около того. Используя iotop
это, я обнаружил, что за это время он довольно много пишет на диск, и теперь я хочу выяснить, в какой файл он пишет, но, к сожалению, iotop
дает только статистику по каждому процессу, а не по открытому файлу (-descriptor).
Я знаю, что могу использовать, lsof
чтобы выяснить, какие файлы открыты в данный момент процессом, но, конечно, в Thunderbird их открыто много, так что это не очень полезно. iostat
показывает только статистику по каждому устройству.
Проблема возникает случайным образом, и для ее появления может потребоваться некоторое время, поэтому я надеюсь, что мне не придется проходить через Thunderbird и просматривать длинные журналы, чтобы выяснить, какой файл содержит больше всего записей.
источник
Ответы:
Если вы присоедините strace к процессу как раз в тот момент, когда он зависает (вы можете получить pid и поставить команду в очередь заранее в запасном терминале), он покажет файловый дескриптор блокирующей записи.
Тривиальный пример:
источник
lsof -p $PID
, чтобы узнать, куда указывает дескриптор файлаls -l /proc/pid/fd
в LinuxЕсли у вас есть root-доступ, я думаю, что лучшим инструментом будет подсистема аудита . Об этом не так много литературы (но больше, чем о loggedfs); Вы можете начать с этим уроком или через несколько примеров или просто с
auditctl
человеком страницей . Здесь должно быть достаточно, чтобы убедиться, что демон запущен, а затем запуститеauditctl
от имени пользователя root:Это будет записывать в журналы
/var/log/audit/audit.log
каждый раз, когда процесс с pid 1234 записывает где-то ниже/home/philipp
. Накладные расходы довольно маленькие, намного меньше, чемstrace
.источник
-S read -S write
(не проверено).