В этой статье мы подробно рассмотрим, как использовать PowerShell и встроенный инструмент Windows PerfMon (Performance Monitor) для сбора и анализа данных о производительности системы. Вы узнаете, какие существуют категории счётчиков, как создавать собственные наборы для мониторинга, автоматизировать процессы с помощью скриптов и анализировать результаты. Такой подход позволяет администраторам, инженерам и разработчикам эффективно отслеживать работу серверов и рабочих станций, выявлять узкие места и планировать оптимизацию.
Что такое PerfMon и зачем он нужен
Performance Monitor — это мощный инструмент Windows для анализа производительности системы. Он позволяет в реальном времени или в фоновом режиме собирать данные о процессоре, памяти, дисках, сети, приложениях и других ресурсах.
Основные задачи PerfMon:
– мониторинг ресурсов в реальном времени;
– запись данных в лог для анализа в будущем;
– создание пользовательских наборов счётчиков;
– интеграция с PowerShell для автоматизации.
Использование PowerShell делает PerfMon особенно гибким, позволяя работать не только через графический интерфейс, но и массово на десятках серверов.
Категории счётчиков PerfMon
PerfMon предоставляет сотни счётчиков. Вот ключевые категории:
– Processor — загрузка процессора, количество прерываний, очередь выполнения.
– Memory — объём доступной памяти, использование файла подкачки.
– LogicalDisk/PhysicalDisk — свободное место, скорость чтения/записи, очередь диска.
– Network Interface — скорость приёма и передачи данных, ошибки пакетов.
– Process — использование ресурсов конкретными процессами.
– SQLServer/IIS/Hyper-V — отдельные наборы счётчиков для серверных приложений.
Сбор данных через PowerShell
Чтобы получить список доступных категорий:
Get-Counter -ListSet * | Select-Object -Property CounterSetName
Пример получения текущей загрузки CPU:
Get-Counter '\\Processor(_Total)\\% Processor Time'
Сбор данных по нескольким метрикам:
Get-Counter '\\Processor(_Total)\\% Processor Time','\\Memory\\Available MBytes','\\LogicalDisk(_Total)\\% Free Space'
Запись данных в лог
Для анализа лучше собирать данные в течение определённого времени. Пример записи в CSV каждые 15 секунд в течение 10 минут:
Get-Counter '\\Memory\\Available MBytes' -SampleInterval 15 -MaxSamples 40 | Export-Csv C:\PerfLogs\memory.csv -NoTypeInformation
Создание Data Collector Set
PerfMon позволяет создавать Data Collector Sets — готовые наборы счётчиков.
Через PowerShell можно использовать logman:
logman create counter "SystemMonitor" -c "\\Processor(_Total)\\% Processor Time" "\\Memory\\Available MBytes" -f csv -o "C:\\PerfLogs\\system_log"
logman start "SystemMonitor"
Для остановки:
logman stop "SystemMonitor"
Автоматизация с PowerShell-скриптами
Скрипты можно запускать вручную или по расписанию (через Task Scheduler). Пример скрипта для запуска мониторинга:
$logName = "PerfMonitor"
$logPath = "C:\\PerfLogs\\monitoring"
logman create counter $logName -c "\\Processor(_Total)\\% Processor Time" "\\LogicalDisk(_Total)\\% Free Space" -f csv -o $logPath
logman start $logName
Добавив этот скрипт в Планировщик задач, можно настроить автоматический сбор данных, например, раз в час.
Анализ собранных данных
Данные в CSV можно открыть в Excel или Power BI. В Excel удобно строить графики и определять тренды. В Power BI можно настроить дашборды с визуализацией.
Пример анализа в PowerShell (среднее значение CPU):
$cpuData = Import-Csv C:\PerfLogs\cpu.csv
($cpuData.CounterSamples | Measure-Object CookedValue -Average).Average
Практические сценарии использования
– SQL Server: мониторинг времени выполнения запросов, использования памяти и дисковых операций.
– IIS: контроль количества запросов, ошибок, нагрузки на процессор.
– Hyper-V: мониторинг виртуальных машин, использование ресурсов хостом.
– Рабочие станции: поиск программ, потребляющих слишком много памяти или CPU.
Советы по оптимизации мониторинга
– Сохраняйте логи в отдельную папку (например, C:\PerfLogs).
– Используйте сжатие и ротацию файлов для долгосрочного хранения.
– Настраивайте разные Data Collector Sets для разных задач (например, CPU отдельно, сеть отдельно).
– Совмещайте PerfMon с другими инструментами (Event Viewer, Power BI, Grafana).
Использование PowerShell совместно с PerfMon позволяет превратить мониторинг в гибкий и автоматизированный процесс. Вы можете собирать данные с десятков серверов, сохранять их в удобном виде и быстро анализировать. Такой подход даёт возможность выявлять узкие места заранее, улучшать стабильность систем и оптимизировать работу приложений.
При регулярном использовании PerfMon с PowerShell вы получаете мощный инструмент администрирования, который помогает держать производительность под контролем и предотвращать проблемы ещё до их появления.