Мониторинг производительности Windows Server, настройка оповещений счетчиков PerfMon
В этой статье мы рассмотрим особенности использования встроенных счетчиков производительности Performance Monitor для мониторинга состояния Windows Server. Счетчики PerfMon можно использовать для отслеживания изменений определенных параметров производительности сервера (алертов) и оповещать администратора в случае возникновения высокой загрузки или других нештатных состояниях.
Чаще всего для мониторинга работоспособности, доступности, загруженности серверов используются сторонние продукты. Если вам нужно получать информацию о производительности приложений либо железа только с одного-двух Windows-серверов, либо когда это нужно на непостоянной основе, либо возник более сложный случай, требующий глубокого траблшутинга производительности, то можно воспользоваться встроенным функционалом Windows Performance Monitor.
Основные возможности Performance Monitor, которые можно использовать отдельно или совместно с другими сторонними системами мониторинга (типа Zabbix, Nagios, Cacti и другие):
- cистема мониторинга при выводе информации о производительности сначала обращается к Performance Monitor;
- главной задачей системы мониторинга является оповещение о наступлении тревожного момента, аварии, а у Performance Monitor – собрать и предоставить диагностические данные.
Текущие значения производительности Windows можно получить из Task Manager, но Performance Monitor умеет несколько больше:
- Task Manager работает только в реальном времени и только на конкретном (локальном) хосте;
- в Performance Monitor можно подключать счётчики с разных серверов, вести наблюдение длительное время и собранную информацию сохранять в файл;
- в Task Manager очень мало показателей производительности.
Мониторинг производительности процессора с Perfomance Monitor
Для снятия данных о производительности процессора воспользуемся несколькими основными счётчиками:
- \Processor\% Processor Time— определяет уровень загрузки ЦП, и отслеживает время, которое ЦП затрачивает на работу процесса. Уровень загрузки ЦП в диапазоне в пределах 80-90 % может указывать на необходимость добавления процессорной мощности.
- \Processor\%Privileged Time — соответствует проценту процессорного времени, затраченного на выполнение команд ядра операционной системы Windows, таких как обработка запросов ввода-вывода SQL Server. Если значение этого счетчика постоянно высокое, и счетчики для объекта Физический диск также имеют высокие значения, то необходимо рассмотреть вопрос об установке более быстрой и более эффективной дисковой подсистемы (см. более подробную статью об анализе производительности дисков с помощью PerfMon).
- \Processor\%User Time — соответствует проценту времени работы CPU, которое он затрачивает на выполнение пользовательских приложений.
Запустите Performance Monitor с помощью команды perfmon. В разделе Performance Monitor отображается загрузкой CPU в реальном времени с помощью графика (параметр Line), с помощью цифр (параметр Report), с помощью столбчатой гистограммы (параметр Histogram bar) (вид выбирается в панели инструментов). Чтобы добавить счетчики, нажмите кнопку “+” (Add Counters).
Слева направо двигается линия в реальном времени и отображает график загрузки процессора, на котором можно увидеть, как всплески, так и постоянную нагрузку.
Например, вам нужно посмотреть загрузку процессора виртуальными машинами и самим Hyper-V. Выберите группу счетчиков Hyper-V Hypervisor Logical Processor, выберите счетчик % Total Run Time. Вы можете показывать нагрузку по всем ядрам CPU (Total), либо по конкретным (HV LP №), либо всё сразу (All Instances). Выберем Total и All Instances.
Группы сборщиков данных в PerfMon
Чтобы не сидеть целый за наблюдением движения линии, создаются группы сбор данных (Data Collector Set), задаются для них параметры и периодически просматриваются.
Чтобы создать группу сбора данных, нужно нажать на разделе User Defined правой кнопкой мыши, в меню выбрать New -> Data Collector Set. Выберите Create manually (Advanced) -> Create Data Logs и включите опцию Performance Counter. Нажмите Add и добавите счётчики. В нашем примере % Total Run Time из группы Hyper-V Hypervisor Logical Processor и Available MBytes из Memory. Установите интервал опроса счётчиков в 3 секунды.
Далее вручную запустите созданный Data Collector Set, нажав на нём правой кнопкой мыши и выбрав в меню пункт Start.
Через некоторое время можно просмотреть отчёт. Для этого в контекстном меню группы сбора данных нужно выбрать пункт Latest Report. Вы можете посмотреть и проанализировать отчёт производительности в виде графика. Отчёт можно скопировать и переслать. Он хранится в C:\PerfLogs\Admin\CPU_Mon и имеет расширение .blg.
Если нужно на другом сервере запустить такой же набор счётчиков, как на первом, то их можно переносить экспортом. Для этого в контекстном меню группы сбора данных выберите пункт Save Template, укажите имя файла (расширение .xml). Скопируйте xml файл на другой сервер, создайте новую группу сбора данных, выберите пункт Create from a template и укажите готовый шаблон.
Создание Alert для мониторинга загрузки CPU
В определённый критический момент в Performance Monitor могут срабатывать алерты, которые помогают ИТ-специалисту прояснить суть проблемы. В первом случае алерт может отправить оповещение, а во втором – запустить другую группу сбора данных.
Чтобы создать алерт в PerfMon, нужно создать ещё один Data Collector Set. Укажите его имя CPU_Alert, выберите опцию Create manually (Advanced), а затем — Performance Counter Alert. Добавьте счётчик % Total Run Time из Hyper-V Hypervisor Logical Processor, укажите границу загрузки 50 %, при превышении которой будет срабатывать алерт, установите интервал опроса счётчика в 3 секунды.
Далее нужно зайти в свойства данной группы сбора информации, перейти на вкладку Alert Action, включить опцию Log an entry in the application event log и запустить группу сбора данных. Когда сработает алерт, в журнале (в консоли Event Viewer в разделе Applications and Services Logs\Microsoft\Windows\Diagnosis-PLA\Operational) появится запись:
“Performance counter \Processor(_Total)\% Processor Time has tripped its alert threshold. The counter value of 100.000000 is over the limit value of 50.000000. 50.000000 is the alert threshold value”.
Здесь же рассмотрим и второй случай, когда нужно запустить другую группу сбора данных. Например, алерт срабатывает при достижении высокой загрузки CPU, делает запись в лог, но вы хотите включить сбор данных с других счётчиков для получения дополнительной информации. Для этого необходимо в свойствах алерта в меню Alert Action в выпадающем списке Start a data collector set выбрать ранее созданную группу сбора, например, CPU_Mon. Рядом находится вкладка Alert Task, в которой можно указать разные аргументы либо подключить готовую задачу из консоли Task Scheduler, указав её имя в поле Run this task when an alert is triggered. Будем использовать второй вариант.
С помощью Task Scheduler можно выполнить какие-то действия: выполнить команду, отправить письмо или вывести сообщение на экран (сейчас последниед ве функции не поддерживаются, считаются устаревшими (deprecated)). Для вывода на уведомления на экран можно использовать скриптом PowerShell. Для этого в консоли Task Scheduler создайте новую задачу, на вкладке Triggers выберите One time, на вкладке Actions в выпадающем поле Action выбирите параметр Start a program, в поле Program/Script укажите powershell.exe, а в поле Add arguments (optional) следующий код:
-WindowStyle hidden -Command «& <[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Внимание, CPU загружен', 'Посмотреть')>«
Для отправки письма вы можете воспользоваться командлетом PowerShell Send-MailMessage или стороннюю утилиту mailsend.exe.. Для этого создайте аналогичное задание в Task Scheduler, в поле Program/Script укажите полный путь к утилите (у нас C:\Scripts\Mail\mailsend.exe), а в поле Add arguments (optional) через параметры нужно передать значения: электронный адрес, адрес и номер порта SMTP-сервера, текст письма и заголовка, пароль:
-to dep.it@ddd.com -from dep.it@ddd.com -ssl -port 465 -auth -smtp smtp.ddd.com -sub Alarm -v -user dep.it@ddd.com +cc +bc -M «Alarm, CPU, Alarm» -pass «it12345»
где +cc означает не запрашивать копию письма, +bc — не запрашивать скрытую копию письма.
Мониторинг
Мониторинг производительности
Мы рассмотрим два основных инструмента мониторинга производительности систем Windows Server — программу » Диспетчер задач «, которая предназначена для мониторинга работы приложений и служб сервера в реальном времени, и консоль » Производительность «, которая может осуществлять мониторинг производительности как в реальном времени, так и путем накопления статистики о работе системы за определенный период времени, причем консоль » Производительность » может показывать и собирать данные одновременно с нескольких систем.
Диспетчер задач
Чтобы открыть » Диспетчер задач «, основной инструмент мониторинга и управления системными процессами и приложениями, нужно выполнить одно из перечисленных действий:
- нажать комбинацию клавиш CTRL+SHIFT+ESC;
- нажать комбинацию клавиш CTRL+ALT+DELETE и нажать кнопку » Диспетчер задач «;
- нажать кнопку » Пуск «, выбрать пункт меню » Выполнить «, ввести taskmgr и нажать кнопку » ОК «;
- щелкнуть правой кнопкой мыши на панели задач и выбрать в контекстном меню команду » Диспетчер задач «.
Настройка общих параметров » Диспетчера задач «
Прежде чем изучать работу данной программы по управлению приложениями и процессами, сделаем некоторые настройки, позволяющие повысить удобство использования программы:
- в меню » Параметры » уберем галочку у параметра «Поверх остальных окон» («Диспетчер задач» не будет перекрывать окна других программ);
- в меню » Вид » у параметра » Скорость обновления » установим значение » Низкая » (это снизит нагрузку на процессор системы со стороны самого » Диспетчера задач «).
Управление приложениями
На закладке » Приложения » показан статус программ, работающих в данный момент в системе (рис. 16.13):
Кнопки в нижней части вкладки предназначены для выполнения следующих действий:
- остановка работы приложения — выберите приложение и щелкните кнопку » Снять задачу «;
- переход к окну нужного приложения — выберите приложение и щелкните кнопку » Переключиться «;
- запуск новой программы — щелкните кнопку » Новая задача » и введите команду для запуска приложения (кнопка » Новая задача » функционально аналогична команде » Выполнить » из меню » Пуск «).
Замечание. В столбце » Состояние » для каждого приложения указано, нормально ли выполняется данное приложение. Статус » Не отвечает » свидетельствует о том, что приложение, возможно, «зависло» и надо завершить связанные с ним процессы. Однако некоторые приложения не отвечают на запросы системы в ходе выполнения интенсивных расчетов. Поэтому, прежде чем закрыть приложение, убедитесь, что оно действительно «зависло».
Контекстное меню списка приложений
При щелчке правой кнопкой мыши на строке приложения или группы приложений в списке отображается контекстное меню, позволяющее:
- переходить к приложению и делать его активным;
- переводить приложение на передний план;
- сворачивать и восстанавливать приложение;
- изменять расположение окон приложений;
- закрывать приложение;
- выделять на вкладке » Процессы » процесс, связанный с этим приложением.
Замечание. Команда » Перейти к процессу » полезна, когда необходимо найти основной процесс для приложения, запустившего несколько процессов.
Управление процессами
Подробная информация о выполняемых процессах отображается на закладке » Процессы » (рис. 16.14):
По умолчанию в этом окне перечислены только процессы, запущенные ОС, локальными службами, сетевыми службами и интерактивным пользователем, т. е. пользователем, локально зарегистрировавшимся на компьютере. Чтобы увидеть процессы, запущенные удаленными пользователями, например подключившимися с помощью удаленного рабочего стола, надо установить галочку у поля » Отображать процессы всех пользователей «.
В столбцах на закладке » Процессы » содержится информация о выполняемых процессах. Она позволяет выявить те из них, которые поглощают системные ресурсы, например, процессорное время или память. По умолчанию отображаются следующие столбцы:
- Имя образа — имя процесса или исполняемого файла, запустившего процесс;
- Имя пользователя — имя пользователя или системной службы, запустившей процесс;
- ЦП — доля ресурсов ЦП (в процентах), занимаемая данным процессом;
- Память — объем оперативной памяти, занятой процессом в данный момент.
При выборе в меню » Вид » команды » Выбрать столбцы «, откроется диалоговое окно, из которого на закладку » Процессы » можно добавить другие столбцы (рис. 16.15):
Некоторые из них могут оказаться очень полезными при поисках причин системной проблемы.
- Идентиф. процесса (PID) — цифровой идентификатор процесса в системе (позволяет найти процесс по его номеру, отображаемому не только в » Диспетчере задач «, но и в других утилитах управления);
- Объем виртуальной памяти — объем памяти данного процесса в килобайтах, выгруженной в данный момент в файл подкачки;
- Базовый приоритет — мера объема системных ресурсов, выделенных процессу; чтобы задать приоритет процесса, щелкните его правой кнопкой мыши, раскройте подменю » Приоритет » и выберите нужный вариант — » Низкий «, » Ниже среднего «, » Средний «, » Выше среднего » и » Реального времени «; большинству процессов по умолчанию назначен средний приоритет; наивысший приоритет назначается процессам реального времени;
- Время ЦП — процессорное время, затраченное на выполнение процесса с момента его запуска; чтобы найти процессы, на выполнение которых расходуется больше всего времени, отобразите этот столбец и щелкните его заголовок, чтобы отсортировать процессы по содержимому столбца;
- Выгружаемый пул, Невыгружаемый пул — выгружаемым пулом называется область системной памяти, предназначенная для объектов, которые при ненадобности можно хранить на диске; невыгружаемый пул — это область системной памяти для объектов, которые на диск записывать нельзя (стоит обращать внимание на процессы, которым требуется значительный объем невыгружаемой памяти — если на сервере недостаточно свободной памяти, эти процессы могут стать причиной большого количества ошибок);
- Ошибок страницы — ошибка страницы возникает, если процесс запрашивает страницу памяти, а система не находит ее по указанному адресу; если запрашиваемая страница хранится в другой области памяти, ошибка называется программной; если запрашиваемую страницу приходится считывать с диска, ошибка называется ошибкой физической памяти; процессоры, как правило, справляются с большинством программных ошибок; ошибки физической памяти могут существенно замедлить работу системы
- Память — максимум — максимальный объем памяти, использованной процессом (на разницу между этим параметром и текущим объемом памяти, занятой процессом, тоже следует обращать внимание — если приложению, например, Microsoft SQL Server, в моменты пиковых нагрузок требуется гораздо больше памяти, чем при обычной работе, возможно, стоит сразу при запуске выделять ему больше памяти);
- Счетчик дескрипторов — полное число дескрипторов файлов, поддерживаемых процессом; эта характеристика позволяет оценить, насколько процесс зависит от файловой системы (С некоторыми процессами связаны тысячи дескрипторов открытых файлов, и каждый из них занимает некоторый объем системной памяти);
- Счетчик потоков — текущее число потоков, используемых процессом; большинство серверных приложений являются многопотоковыми, что позволяет одновременно выполнять несколько запросов процесса; некоторые приложения способны динамически управлять числом одновременно исполняемых потоков, что позволяет повысить их производительность; чрезмерное увеличение количества потоков ухудшает производительность, так как ОС приходится слишком часто переключать контексты потоков;
- Число чтений, Число записей — полное число операций чтения с диска и записи на диск с момента запуска процесса; этот параметр показывает, насколько активно процессом используется диск (если рост числа операций ввода-вывода не согласуется с реальной активностью сервера, процесс, вероятно, не способен кэшировать файлы или кэширование файлов неверно настроено).
Замечание. В списке процессов присутствует процесс » Бездействие системы «. Он отслеживает объем неиспользуемых ресурсов. Так, число 99 в столбце ЦП (CPU) означает, что 99% системных ресурсов в настоящий момент не используется. Приоритет этого процесса задать нельзя.
Просматривая информацию о процессах, надо помнить, что одно приложение может породить несколько процессов. Обычно все они зависят от родительского процесса и формируют расходящееся от него дерево процессов. Чтобы найти главный (родительский) процесс для данного приложения, на закладке «Приложения» щелкните приложение правой кнопкой мыши и выберите команду » Перейти к процессу «. Чтобы корректно завершить работу приложения с помощью » Диспетчера задач «, останавливайте либо само приложение, либо его главный процесс. Не останавливайте по отдельности зависимые процессы.
Остановить главный процесс приложения и порожденные им вторичные процессы можно несколькими способами: