Как измерить чистое изменение используемого дискового пространства из-за активности данного процесса в Linux?
Я хотел бы отслеживать требования к дисковому пространству работающего процесса. В идеале я хочу иметь возможность указать на процесс и выяснить, какие изменения в используемом дисковом пространстве связаны с ним. Есть ли простой способ сделать это в Linux? (Я почти уверен, что это будет возможно, хотя, возможно, не очень легко сделать в Solaris с DTrace)
3 ответа
Возможно, вам придется отследить его (или попросить сделать это за вас и проанализировать вывод), а затем попытаться выяснить, какой диск используется.
Это нетривиально, так как ваш процесс трассировки должен понимать, какие файловые операции используют дисковое пространство, и быть свободным от условий гонки. Тем не менее, вы могли бы сделать приближение.
Довольно много вещей может занимать дисковое пространство, потому что большинство файловых систем Linux поддерживают "дыры". Я полагаю, вы могли бы посчитать дыры также для бухгалтерских целей.
Другой проблемой является знание того, какие операции файловой системы освобождают дисковое пространство - например, открытие файла для записи может, в некоторых случаях, обрезать его. Это явно освобождает пространство. Аналогично, переименование файла может освободить место, если оно переименовано поверх существующего файла.
Другой проблемой являются процессы, которые вызывают вспомогательные процессы для выполнения каких-либо задач, например, если myprog выполняет систему ("rm -rf somedir").
Также довольно сложно узнать, когда файл был полностью удален, так как он может быть удален из файловой системы, но все еще открыт другим процессом.
Удачного взлома:)
Если вы знаете PID процесса, который нужно отслеживать, вы найдете много информации об этом в /proc/<PID>
,
Файл /proc/<PID>/io
содержит статистику о байтах, прочитанных и записанных процессом, это должно быть то, что вы ищете.
Кроме того, в /proc/<PID>/fd/
вы найдете ссылки на все файлы, открытые вашим процессом, чтобы вы могли отслеживать их.