Как отслеживать, в какие файлы записывается много данных в Linux?
Я могу контролировать ввод / вывод с помощью таких инструментов, как iotop. Это позволяет мне определить, какие процессы выполняют сколько операций ввода-вывода.
Теперь я хотел бы знать, в какие файлы эти процессы записывают все эти данные. Как бы я это сделал?
Например, что-то вроде: "Хорошо, я знаю, что Tomcat выполняет много операций ввода-вывода. Какие файлы он в основном читает / записывает из / в"?
1 ответ
Я знаю два способа получить такую информацию.
Используя вручную
lsof
,
Старый добрыйlsof
может показать вам, к каким файлам обращается процесс или поток, наряду с несколькими другими частями информации. Вiotop -o
, глазное яблоко и принять к сведениюTID
(Идентификатор потока) значение процесса или потока, который необходимо проверить. Потом закройiotop
и бегиlsof -p [pid/tid]
, Если вам нужно отсортировать вывод, направьте его вsort
, Например,lsof -p [pid or tid] | sort -n -k 7,7 -r
будет сортировать вывод изlsof
по седьмой колонке (SIZE/OFF
) в обратном порядке (от самого большого до самого маленького).С помощью
fatrace
,
Это новое дополнение к Linux похоже наinotify
за исключением того, что он не нацелен на определенные файлы / каталоги. Он показывает совокупный дисковый ввод-вывод в зависимости от обращающихся файлов. В зависимости от вашего дистрибутива вы можете иметь или не иметь доступ к этой изящной маленькой программе в предварительно скомпилированном исполняемом виде. Самый старый дистрибутив, который обеспечиваетfatrace
в его официальных репозиториях я знаю Ubuntu 12.04. В Debian 7, который я использую, его нет.
Csysdig , вероятно, ваш лучший выбор. У него приятный интерфейс ncurses. https://github.com/draios/sysdig/wiki/Csysdig-Overview