Определение процессов с высоким дисковым вводом-выводом (I/O) в Windows
В Windows некоторые запущенные процессы могут создавать сильную нагрузку на диск, что в свою очередь негативно сказывается на производительности других приложений. В этой статье мы рассмотрим базовые инструменты Windows, с помощью которых можно выявить процессы, сильно нагружающие подсистему дисков.
Просмотр текущей нагрузки на диск через Диспетчер задач (Task Manager)
Самый простой способ посмотреть текущую загрузку диска — воспользоваться Диспетчером задач. Нажмите Ctrl + Shift + Esc
, перейдите на вкладку Performance (Производительность) и выберите один из физических дисков. На скриншоте показан пример, когда диск загружен на 100%.
На вкладке Processes (Процессы) вы можете узнать, какой процесс вызывает высокую загрузку диска. В новых версиях Диспетчера задач в Windows 10 и 11 есть столбец Disk, который показывает активность процессов по работе с диском (помимо привычных столбцов для памяти и ЦП). Отсортируйте процессы по столбцу Disk, чтобы увидеть, какие программы потребляют больше всего ресурсов диска.
Для получения более детальной информации щёлкните правой кнопкой мыши по процессу и выберите Go to Details (Перейти к деталям).
Добавление дополнительных столбцов для анализа I/O
Для удобства можно добавить в Диспетчер задач дополнительные столбцы. Кликните правой кнопкой по заголовку таблицы процессов, выберите «Select Columns», и добавьте следующие параметры:
- I/O read bytes
- I/O write bytes
- Command line
Это позволит понять, с какими операциями на диске (чтение или запись) связан процесс, а также увидеть команду запуска программы. На примере видно, что высоким дисковым нагрузкам способствует запущенный PowerShell скрипт (*.PS1
).
Использование Монитора ресурсов (Resource Monitor) для определения файлов с высокой активностью
После того, как мы определили процесс с высокой загрузкой диска, возникает вопрос — какие файлы он активно читает или записывает. Встроенный Resource Monitor (Монитор ресурсов) позволяет найти эти файлы. Откройте его из вкладки Производительность или запустите командой resmon.exe
.
Перейдите на вкладку Disk (Диск). Отсортируйте процессы по активности ввода-вывода и отметьте галочкой процесс, вызывающий высокую нагрузку.
В разделе Disk Activity (Активность диска) появится фильтрованный список файлов, используемых этим процессом. Найдите файл с наибольшим количеством операций записи и/или чтения — именно он является источником повышенной нагрузки.
В данном примере для проверки производительности диска в Windows я использую инструмент DiskSpd.
Использование Process Explorer для детального анализа дисковой активности
Инструмент Microsoft Process Explorer также помогает определить процессы и потоки с высокой загрузкой диска. Process Explorer предоставляет подробную информацию о работе с диском, позволяя выявить конкретные процессы и потоки, ответственные за интенсивную работу с диском, а также просмотреть файлы и ресурсы, которые они используют.
По умолчанию Process Explorer не показывает данные о чтении и записи. Чтобы добавить столбцы I/O Read Bytes и I/O Write Bytes, перейдите на вкладку Process IO и выберите View -> Select columns.
Отсортируйте процессы по показателям ввода-вывода, чтобы найти наиболее нагружающие диски. На вкладке Threads (Потоки) можно найти конкретные потоки процесса, вызывающие интенсивный ввод-вывод.
Особенности поиска процессов с системными (SYSTEM) правами
Иногда определить процесс с высокой дисковой нагрузкой через Task Manager или Resource Monitor сложно, если процесс работает с правами SYSTEM. Такие процессы могут быть невидимы в Диспетчере задач.
На скриншоте ниже показан пример системного процесса, использующего файл VMDK. Из контекста понятно, что это файл виртуальной машины VMware Workstation, но из имени процесса понять это сложно.
В этом примере речь о системном процессе с PID 4 — это стандартный системный процесс в режиме ядра (в том числе в нем работают драйверы устройств). Утилита Process Monitor (ProcMon
) — лучший вариант для изучения дисковой активности системных процессов, так как отображает I/O операции, включая работу в уровне ядра.
Procmon может показывать активность по использованию файлов. Перейдите в меню Tools (Инструменты) -> File Summary (Сводка по файлам). Выберите наиболее используемый файл и дважды щёлкните по нему — путь к файлу автоматически добавится в фильтры Procmon. В моём случае причина высокой нагрузки — процесс vmware-vmx.exe
(основной процесс VMware Workstation, запускающий виртуальные машины).
Получение информации о дисковой активности через счётчики производительности
Информацию о дисковой активности процессов можно получить и через счётчики производительности. Следующая PowerShell команда в реальном времени выводит 10 процессов с наибольшей дисковой активностью:
Get-Counter '\Process(*)\IO Data Bytes/sec' | Select-Object -ExpandProperty CounterSamples | Sort-Object -Property CookedValue -Descending | Select-Object InstanceName, CookedValue -First 10
Отобразятся 10 процессов с высокой дисковой активностью. Чтобы узнать, какие файлы использует конкретный процесс, воспользуйтесь консольным инструментом Handle из Sysinternals:
handle.exe -p <ProcessNameOrPID>
Команда покажет все открытые дескрипторы файлов указанного процесса (по имени или PID).
Пример использования утилиты Handle для освобождения заблокированных файлов в Windows.
Выводы
Мы рассмотрели основные системные инструменты и утилиты, позволяющие определить, какие процессы в Windows вызывают высокую нагрузку на диск. Это Диспетчер задач, Монитор ресурсов, Process Explorer, Process Monitor, счётчики производительности и консольные инструменты из набора Sysinternals.