Системный монитор не удалось добавить эти счетчики
Системный монитор Windows (Performance Monitor): просмотр информации по загруженности оборудования системы
Во всех версиях Windows присутствует универсальный инструмент для сбора информации по загруженности оборудования системы — Системный монитор Windows (Windows Performance Monitor). Он представляет собой оснастку консоли управления (MMC), с помощью которой пользователь может в реальном времени осуществлять контроль над производительностью приложений и оборудования, выбирать данные, которые будут сохраняться в файлах журналов, задавать пороговые значения для оповещений и автоматических действий, генерировать отчеты и просматривать историю производительности системы, используя различные способы сортировки.
В данной статье я подробно рассмотрю процедуры запуска и настройки системного монитора Windows.
0. Оглавление
- Запуск системного монитора Windows
- Работа с системным монитором
- Настройка системного монитора
- Запись данных системного монитора в файл
1. Запуск системного монитора Windows
В Windows Server 2012 запустить системный монитор можно из Диспетчера серверов (Server Manager) в меню «Средства» (Tools) — «Системный монитор» (Performance Monitor)
В Windows Server 2008 также данную оснастку можно найти в Диспетчере сервера (Server Manager) в группе «Диагностика» (Diagnostics) — «Производительность» (Performance).
А также в меню «Пуск» (Start) — «Администрирование» (Administrative Tools) — «Системный монитор» (Performance Monitor)
Также, в любой редакции Windows запустить Системный монитор можно выполнив команду perfmon (меню «Пуск» (Start) — «Выполнить» (Run))
Ну и как любая другая, данная оснастка доступна в консоли управления оснастками (меню «Пуск» (Start) — «Выполнить» (Run) — «MMC»)
Пользователи, являющиеся членами группы «Пользователи» (Users) могут открывать журналы для просмотра в мониторе производительности, а также могут изменять свойства отображения монитором производительности данных истории во время просмотра.
Члены группы «Пользователи монитора производительности» (Performance Monitor Users) могут выполнять все действия, доступные членам группы «Пользователи» (Users), а также могут в реальном времени просматривать данные в мониторе производительности и изменять свойства отображения монитором производительности данных во время просмотра в реальном времени.
Участники локальной группы «Администраторы» (Administrators) (или аналогичной) могут использовать все компоненты системного монитора Windows.
2. Работа с системным монитором
Как и другие оснастки Windows, системный монитор состоит из трех окон: окна с деревом консоли (можно скрыть / показать с помощью соответствующей кнопки на панели), информационного окна и панели действий (также можно скрыть / показать с помощью кнопки на панели, по умолчанию скрыта).
При открытии в дереве консоли активна вкладка «Системный монитор» (Performance Monitor), а в информационном окне можно сразу увидеть информацию по предустановленным счетчикам, выводимую в виде графиков в реальном времени.
Список выводимых счетчиков расположен сразу под самим графиком.
Можно включить / отключить отображение того или иного счетчика установив или сняв соответствующий флажок в таблице. Там же можно настроить цвет, масштаб и стиль графика для каждого из счетчиков. Наиболее интересующий в данный момент счетчик возможно выделить жирным черным цветом, отметив его в таблице и нажав на кнопку «Выделить» (Highlight), расположенную на панели над графиком.
Также, выделив счетчик в списке, можно увидеть длительность (Duration), максимум (Maximum), минимум (Minimum), среднее (Average) и последнее (Last) значение показателя для данного счетчика производительности.
На той же панели расположены и кнопки, с помощью которых можно удалить или добавить новый счетчик для отображения. Нажав на кнопку «Добавить» (Add) откроется окно со списком имеющихся счетчиков. Их очень много. Для удобства все счетчики сгруппированы по типу оборудования или ПО. Обратите внимание, что можно добавлять как счетчики текущего компьютера, так и компьютеров сети (при наличии соответствующих прав).
Для некоторых счетчиков возможно выбрать конкретный экземпляр объекта. Например, при добавлении счетчика «Средняя длина очереди диска» (Avg. Disk Queue Length) можно выбрать диск, для которого будет собираться статистика. Выбрав необходимый счетчики (или конкретный экземпляр объекта для счетчика) следует перенести его в таблицу «Добавленные счетчики» (Added Counters) с помощью кнопки «Добавить» (Add). А при помощи соответствующего флажка, для каждого счетчика можно вывести также и его короткое описание.
Добавив все необходимые счетчики, нажимаем «ОК».
После чего счетчики сразу появятся в списке выводимых показателей.
Данные по счетчикам производительности можно выводить не только в виде графика (Line), но и в виде линейчатой гистограммы (Histogram Bar) или тестового отчета (Report). Тип диаграммы меняется с помощью соответствующей кнопке на панели.
3. Настройка системного монитора
Все вышеописанные и другие настройки доступны в окне настроек системного монитора, которое можно вызвать с помощью соответствующих кнопок на панели задач.
На вкладке «Общие» (General) можно выбрать отображаемые элементы (Display elements), значения показателей счетчиков (Report and histogram data), которые будут выводиться в графике, длительность (Duration) и интервалы (Sample every) съема показателей.
На вкладках «График» (Graph) и «Оформление» (Appearance) можно настроить тип (View), внешний вид и прочие параметры отображения графика.
На вкладке «Данные» (Data) можно добавить, удалить или настроить вид отображения конкретного счетчика производительности.
А на вкладке «Источник» (Source) можно выбрать источник отображения данных. По умолчанию это текущая активность, но возможно выбрать и ранее записанный файл журнала системного монитора.
4. Запись данных системного монитора в файл
Просматривать информацию по текущей загрузке оборудования в реальном времени конечно полезно, но чаще необходимо анализировать показания счетчиков производительности в течении определенного периода времени. Делается это с помощью Сборщиков данных (Data Collector), которые записывают показания выбранных счетчиков в файл журнала системного монитора, а затем уже администратор просматривает полученную таким образом информацию в системном мониторе.
О том, как настраиваются сборщики данных для системного монитора читайте в статье «Системный монитор Windows (Performance Monitor): сборщики данных загруженности оборудования системы».
Смотрите также:
Ранее я уже писал о работе и настройке системного монитора Windows (Performance Monitor). В данной статье продолжим знакомиться с этим замечательным инструментом. В частности, поговорим о том как создавать сборщики…
По умолчанию поиск в Windows (в данном примере в Windows 7) ищет файлы по имени. Содержимое учитывает только в проиндексированных расположениях. Чтобы поиск искал по содержимому всех документов, нужно изменить…
На нашем сайте уже раннее рассматривался вариант установки изначально русифицированной редакции Windows 8.1. Англоязычные редакции, к примеру, ознакомительная версия Windows 8.1 Корпоративная на сайте Центра пробного ПО от компании Microsoft, дистрибутив…
Ошибки в ЦУП и способы решения
Повторюсь еще раз, 90% ошибок возникает из-за неправильной настройки ЦУП. Как настроить его правильно достаточно подробно описано здесь.
Перед тем как искать свою проблему здесь, убедитесь что вы все настроили верно, т.к. проблемы возникающие из-за неверной настройки здесь не описаны.
Ошибка:
Точка входа в процедуру PdhAddEnglishCounterW не найдена в библиотеке DLL pdh.dll
Решение:
- Использовать внешнюю компоненту из версии ЦУП 2.0.4.11 и изменить код при сравнении версий
- Использовать ОС не ниже Windows Vista
- Использовать версию ЦУП 2.0.4.11
Описание:
Ошибка:
Counters.cpp : 112 (0xc0000bb8) – Не удалось добавить счетчик производительности
Решение:
- Переименовать в коде именя счетчиков с английского наименования на русское (если используется русская локализация MS SQL Server). Измененные функции «ИмяСчетчикаКоличествоВзаимоблокировокMSSQL» и «ИмяСчетчикаКоличествоОжиданийMSSQL» есть в архиве.
- Счетчики в Performance Monitor могут называться и не так как в архиве, тогда пункт 1 не сработает, т.к. вам нужно будет вписать свое имя счетчиков. В этом случае нужно посмотреть точное полное название счетчика здесь: Точное название счетчика нужно смотреть в «Управление компьютером > Производительность > Средства наблюдения > Системный монитор». Спасибо за дополнение ZhiharevDmitriy
- При установке 32-битного MS SQL Server на 64-битную Windows счетчики производительности не отображаются в PerfMon и их невозможно добавить из 1С.
Утилита System Monitor (Perfmon), включенная в состав Windows x64 и используемая по умолчанию, также является 64разрядным приложением. Microsoft не предоставляет возможности собирать информацию от 32разрядных счетчиков 64разрядной утилитой System Monitor (Perfmon). Но нет ли у нас и 32разрядной версии? Да, она присутствует, поделенная на две части, одна из которых слегка замаскирована, а другая скрыта намного глубже!. Подробно решение описано здесь. Спасибо пользователю cheburashka за описание данной ошибки и решения. - Не использовать показатели «Количество взаимоблокировок» или «Количество таймаутов»
Описание:
Если выбрать показатель «Количество взаимоблокировок» или «Количество таймаутов», то ЦУП добавляет счетчики SQL Server в системный монитор (PerfMon), что бы получить эту информацию. Если добавить счетчики не получается, возникает данная ошибка.
Ошибка:
MSSQL.cpp : 79 ( 0x0: The operation completed successfully. ) — SQL Server connection failed.
- Создать доменного пользователя, дать ему все права предыдущего пользователя и от его имени запускать сервер ЦУП
- Сделать пользователей с одинаковым именем на SQL и на сервере ЦУП
Описание:
Возникает при анализе взаимоблокировок. Заморочки с правами доступа.
MSSQL.cpp : 79 ( 0x36b7: The requested lookup key was not found in any active activation context. ) — SQL Server connection failed.
Она же только на русском:
.MSSQL.cpp : 79 ( 0x36b7: Указанный ключ соответствия не обнаружен ни в одном из активных контекстов активации. ) — SQL Server connection failed
- Пользователю ОС под которым запущен клиент ЦУП и пользователю ОС под которым запущен сервер 1С на котором размещается база ЦУП, нужно дать права «Alter trace» в SQL Server, просто откройте инструкцию на шаге настройки «Трассировки» и сделайте все по шагам еще раз, только сделать это нужно для двху пользователей.
- Проверить, что у пользователя под которым запущен сервер СУБД есть доступ на чтение и на запись в указанный каталог трассировки.
Возникает при анализе взаимоблокировок.
Ошибка:
Ошибка при вызове метода контекста (ПрочитатьXML)
<ОбщийМодуль.АнализБлокировок1С.Модуль(975)>: Преобразование значения к типу Число не может быть выполнено
Решение:
заменить код функции «ПодготовитьБлокировки», есть в архиве.
Описание:
Ничего особенного, просто ошибка в коде
Ошибка:
Ошибка аутентификации при попытке входа в базу ЦУП в терминале, на отдельной машине все запускается и ошибки нет
Решение:
Установить релиз платформы не ниже 8.2.15.257
Описание:
COMConnector не может найти ключ защиты из-за ошибки в платформе
Ошибка платформы «10080827 Получение лицензии объектом V82.COMConnector»
Ошибка:
Microsoft OLE DB Provider for SQL Server: SHOWPLAN permission denied in database ‘tempdb’.
Решение:
Выполнить в СУБД команду
USE tempdb
GO
GRANT SHOWPLAN TO
GO
Описание:
У пользователя SQL, под которым запущена исследуемая база, нет прав на получение плана запроса.
Ошибка:
Иногда не удается пройти шаг включения ТЖ
Решение:
- Синхронизировать время на сервере ЦУП и на сервере исследуемой базы
- Возможна ошибка из-за летнего времени, описана здесь
- В файле conf.cfg не указано значение параметра ConfLocation. Для 8.3 там должно быть указано C:Program Files (x86)1cv8conf или C:Program Files1cv8conf в зависимости от разрядности платформы.
Описание:
При создании ТЖ сравнивается время файлов, если оно не совпадает ЦУП «думает» что ТЖ не создан.
Ошибка:
<ОбщийМодуль.АнализБлокировок1С.Модуль(392)>: Ошибка при вызове метода контекста (Выполнить): <(8, 27)>: Не задано значение параметра «НачалоТранзакции»И ТЖ.МоментВремени МЕЖДУ <>&НачалоТранзакции И &МоментВремениЖертвы
Решение:
Ошибка в коде процедуры «ПодготовитьПредпологаемыхВиновников», исправленная процедура есть в архиве.
ЦУП попытался проанализировать «отрывок» транзакции, данные по которой полностью не записались в базу, например ЦУП выключили в середине транзакции.
Ошибка:
Не собираются оперативные показатели
1. Не назначена роль processadmin для пользователя под которым запускается сервер 1С исследуемой базы (чаще всего)
2. «Портится» COM объект «ИБ» в процедуре ПолучитьСоединенияИБ (очень редко но бывает) — т.е. в отладчике объект есть и свойства у него есть, но при попытке использовать метод GetInfoBaseConnections получается лажа. В моей практике было всего пару раз, ловится только через отладчик. В этом случае надо заменить функцию ПолучитьСоединенияИБ, текстом из вложения. Причина не ясна.
Ошибка:
<ОбщийМодуль.АнализБлокировок1С.Модуль(941)>: Индекс находится за границами массива
Решение:
Исправить строку 923 ОМ. АнализБлокировок1С
Так же нужно исправить функцию БлокировкаРазобрана в том же модуле, вместо
Ошибка в коде, не предусмотрена ситуация когда есть пробелы в значениях свойств события TLOCK
Ошибка:
Невозможно пройти мастер на шаге настройки ТЖ в том случае, если используется более одного сервера в кластере.
Нужно внести исправления в код, к сожалению решение у меня не сохранилось, но если у вас возникла такая ситуация, с помощью отладчика и здравого смысла вы довольно быстро найдете причину проблемы. Как только будет время, смоделирую ситуацию и добавлю сюда исправленный код.
Ошибка:
При анализе возникает сообщение: Нет проблем с производительностью.
Хотя вы точно знаете что они есть, видите что в логах есть данные о медленных запросах и т.д.
Решение:
Один из вариантов решения описан в комменатрии (39) от Bad_Developer
Подробное решение проблемы есть там же в прикрепленном файле.
Ошибка:
При анализе взаимоблокировок появляется ошибка “Ошибка при вызове метода контекста (РазделитьФайл)”.
Решение:
Установить пользователю, под которым запущен сервер 1С:Предприятие с ЦУП, полные права на локальную папку Temp , в которой разбираются результаты анализа.
Описание:
Как водится с ЦУПом — очередные заморочки с правами. Спасибо пользователю h00k за описание ошибки и решение.
Ошибка:
При анализе появляется сообщение «Анализ проблем на выбранном участке не может быть выполнен…»
В мониторе анализе замеры отображаются с восклицательным знаком, ошибка «Ошибка при вызове конструктора (COMОбъект)»
Пока зафиксирована только для 8.3
Решение:
Т.к. сервер 1С — 64-битный, а comcntr.dll — 32, просто зарегистрировать ее через regsvr32 было недостаточно.
Т.е. на клиенте объект COMConnector создавался по той причине, что и клиент и компонента 32-битные.
В рамках фонового задания — объект создается уже вызовом сервера — а тут уже срабатывает следующая пакость — дело в том что на 64-ных ОС сделано разделение реестра, и в зависимости от разрядности вызывающего процесса он получает от ОС разные ветки регистрации — результат сервер не видит зарегистрированную 32-ю компоненту.
Решение проблемы весьма простое — опубликовать данную компоненту как COM+ приложение, т.е. через оснастку «Component Services»
Просто делаем там дополнительную ветку V83COMConnector — и прописываем внутрь нашу dll.
Единственный минус — при обновлении платформы нельзя забывать перепрописать dll из нового релиза, а то предположительно можно получить много сюрпризов.
Описание:
В процедуре ПолучитьComСоединительПриложения() не отрабатывает конструкция Новый COMОбъект(ПолучитьВерсиюCom() + «.COMConnector»), т.е. попытка создать COM-объект V83.COMConnector
Спасибо H1nt за описание ошибки и решения проблемы.
Ошибка:
Происходит зависание при разборе данных о блокировках.
Решение:
Заменить функцию «РазделитьСтроку» в общем модуле «КипОбщий». Код новой функции приведен ниже
Описание:
В страрой функции использовался неоптимальный алгоритм разбора строки посимвольно, что при большом объеме обрабатываемых данных приводило к зависанию.
Спасибо wondkind за описание ошибки и решения проблемы.
Можно ускорить разбор данных исправив неоптимальный запрос, как бы стрнно это не звучало 🙂
Необходимо в ОМ.Анализ в функции ВыгрузитьДанные, переписать запрос с использованием временной таблицы вместо подзапроса.
Ускорение будет весьма ощутимо, чем больше данных было собрано, тем сильнее будет эффект.
Так же прошу обратить внимание на содержательный комментарий (18) от пользователя serno
Там приводится пример ускорения еще одного запроса в ЦУП
Если у вас есть примеры других ошибок в ЦУП (но не по вине неправильной настройки) пишите в комментариях к статье, буду актуализировать.
Системный монитор не удалось добавить эти счетчики
После регистрации домена организации в Microsoft 365, Outlook клиентов стал с завидной регулярностью запрашивать вход с учетной записью Microsoft, хотя организация использует собственный локальный Exchange On-Premises:
Для решения данной проблемы нужно добавить в реестр на затрагиваемых рабочих станциях следующий ключ:
Массово на компьютеры распространить ключ можно с помощью групповых политик.
Проблема возникла на Outlook 2016 и Exchange 2016 при регистрации домена организации в Microsoft 365.
Не работает VPN в Windows Server 2016 Essentials
Настраивая «Повсеместный доступ» через Панель мониторинга Windows Server 2016 Essentials, включил возможность подключения по VPN, создал подключение на клиентском компьютере. Подключение прошло успешно, однако доступ к каким-либо ресурсам в удаленной сети не работал, пинги не работали.
Недолгое исследования показало, что клиентский компьютер не получает ip-адрес от сервера.
Было решено на сервере установить оснастку «Маршрутизация и удаленный доступ» и проверить настройки VPN, что я и сделал. Однако, оснастка выдала следующее — «На этом сервере отключен устаревший режим» и с помощью оснастки просмотреть и изменить настройки нельзя, нужно использовать PowerShell:
Немного погуглив и поразмыслив, пришел к выводу, что скорее всего проблема в том, что RRAS почему-то не может арендовать ip для своих клиентов у DHCP роутера. Было решено назначить статический пул адресов для клиентов VPN, делается это следующей командой PowerShell:
за -IPAddressRange указывается начальный и конечный ip-адреса нужного вам диапазона.
Выполнение указанной команды решило проблему, VPN-клиенты стали получать ip-адреса и доступ к ресурсам удаленной сети.
Чтобы вернуть обратно получение ip-адресов от DHCP нужно выполнить следующую команду:
Если вы хотите получить доступ к настройкам все же через консоль «Маршрутизация и удаленный доступ», нужно удалить соответствующую роль и компоненты и установить их заново, но уже не через «Панель мониторинга» Essentials, а средствами сервера.
Как KB4045655 убило мой Exchange 2016
Была у меня задача обновить тривиальную инсталляцию Exchange 2016 CU5 до CU7. Один контроллер домена на отдельном сервере, один сервер Exchange, операционная система Windows Server 2016. CU7 установился без проблем, правда устанавливался около двух часов, несмотря на то, что использовались SSD-диски. Все тесты прошли успешно и с чувством глубокого удовлетворения я отправился спать. Просыпаюсь я утром, пробую войти в OWA — сайт недоступен. Запускаю Outlook — ошибка подключения. Захожу на сервер и наблюдаю такую картину — все службы Exchange остановлены и находятся в состоянии Disabled. Оба-на.
Смотрю журналы, что было ночью, и выясняется, что через Windows Update прилетело обновление Security Update For Exchange Server 2016 CU7 (KB4045655), его установка прошла неудачно.
Решил попробовать скачать обновление и установить вручную. Установка завершается неудачей, установщик сообщает, что изменений произведено не было.
Перевожу все необходимые службы Exchange в состояние Automatic, перезагружаю сервер, однако службы не стартуют — «The service did not respond to the start or control request in a timely fashion». Супер, отличный подарок на 23 февраля, я просто мечтал получить полностью нерабочий Exchange и провозиться с ним весь праздничный день
Пробую установить обновление повторно — попытка также оканчивается неудачей, при этом установка прерывается на моменте «Stopping services».
Решаю погуглить и обнаруживаю, что проблема такая, оказывается, не у меня одного, и не только с этим обновлением
Как выяснилось, причина неудачи установки обновления в том, что для остановки служб используется командлет Stop-SetupService, которого нет в системе по умолчанию. Наблюдать это можно открыв C:ExchangeSetupLogsServiceControl.log и обнаружив там сообщение об ошибке «The term ‘Stop-SetupService’ is not recognized as the name of a cmdlet, function, script file, or operable program.»
Проблема решается путем добавления профиля PowerShell с ярлыком Stop-SetupService: New-Alias Stop-SetupService Stop-Service. После этого установка обновления проходит без проблем и после перезагрузки сервера все службы стартуют нормально и работа Exchange полностью восстанавливается. Фууух.
Порядок действий следующий:
1. Переводим все необходимые службы Exchange в состояние Automatic согласно списку тут https://technet.microsoft.com/ru-ru/library/ee423542%28v=exchg.160%29.aspx?f=255&MSPPError=-. , а также службы IIS Admin Service, Microsoft Filtering Management Service и World Wide Web Publishing Service
2. Загружаем с сайта Microsoft вручную Security Update For Exchange Server 2016 CU7 (KB4045655), файл Exchange2016-KB4045655-x64-en.msp https://www.microsoft.com/en-US/download/details.aspx?id=56331
3. Создаем файл «profile.ps1» в каталоге «C:WindowsSystem32WindowsPowerShellv1.0», содержащий следующую команду:
New-Alias Stop-SetupService Stop-Service
4. Запускаем командную строку с повышением (от имени администратора) и запускаем из нее обновление Exchange2016-KB4045655-x64-en.msp. Запуск с повышением нужен потому, что если так не сделать, то иногда случается, что после установки перестает работать OWA и ECP.
5. После успешной установки перезагружаем сервер по запросу инсталлятора и, вуаля, получем снова рабочий Exchange 8)
Вот такие сырые и не до конца отлаженные обновления могут иногда прилететь от Microsoft через Windows Update. Будьте внимательны и разворачивайте обновления и CU вначале в тестовой среде, и только потом в рабочей. Успехов!
Счетчики производительности не запущены
Если сравнить между собой внешний вид диспетчера задач в Windows 8 (8.1) и в Windows Server 2012 (R2) можно заметить одну интересную особенность — в серверной версии Task Manager-а не отображается информация о производительности/загрузке дисковой подсистемы. В то же время в десктопной редакции Windows 8 эта информация есть:
Внешний вид вкладки Perfomance диспетчера задач в Windows Server 2012
Внешний вид вкладки Perfomance в Task Managere Windows 8
Дело в том, что разработчики Windows решили убрать информацию cо счетчиков производительности дисковой подсистему из Task Manager, объясняя это высокой нагрузкой на дисковую подсистему, вызываемую эти счетчиком, а для мониторинга дисковой подсистемы рекомендуют использовать Resource Monitor.
Однако в Windows Server 2012 существует возможность включить отображение счетчиков производительности дисков в диспетчере задач. Сделать это можно командой:
Перезапустите Task Manager и убедитесь, что на вкладке Perfomance появилась информация о скорости чтения/записи на диск (и).
Отключается функционал аналогично:
Блог о компьютерах, операционных системах и программном обеспечении
среда, 3 декабря 2014 г.
Ошибка «Не удается получить данные счетчиков производительности» в диспетчере серверов
- Запустить Системный монитор (perfmon.exe), затем развернуть меню Группы сборщиков данных, а после этого Особый и найти группу Server Manager Performance Monitor. Так как, скорей всего, она будет отсутствовать, переходим к следующему шагу.
- Переходим на сервер в котором счетчики производительности работают без проблем.
- Открываем Командную строку (cmd.exe) с правами администратора и экспортируем группу сборщиков данных «Server Manager Performance Monitor» используя команду:
logman export -n «Server Manager Performance Monitor» -xml SMPM.xml - Открываем полученный файл SMPM.xml в Wordpad и полностью удаляем секцию Список различных ID , а затем сохраняем файл.
- Переносим файл SMPM.xml на неработающий сервер. Там же открываем Командную строку (cmd.exe) с правами администратора и импортируем вышеуказанный XML файл:
logman import -n «Server Manager Performance Monitor» -xml SMPM.xml
Запускаем счетчики производительности:
logman start «Server Manager Performance Monitor»
После обновления Диспетчера серверов данные производительности станут доступны.
В своем первом посте я хотел бы поделитьcя опытом использования такой утилиты как logman, с помощью которой можно собирать информацию о потреблении ресурсов (и не только) приложением под Windows.
В один из дней на работе была поставлена задача снятия метрик производительности для одного приложения под Windows. Главным условием было использовать по минимуму какие-либо сторонние утилиты, и так как опыта в подобных вещах у меня к тому времени не было, немного покопавшись, выбор пал на logman. Особой точности не требовалось и надо было лишь понять характер потребления ресурсов приложением, для чего logman с первого взгляда вполне подходил.
Итак, перейдем непосредственно к сути поста.
Многие из вас скорее всего в работе или для домашних нужд использовали нативную Windows утилиту Performance monitor (perfmon). Так вот logman — это грубо говоря command line представление perfmon’а. Он позволяет создавать, запускать, останавливать счетчики производителности, писать результат во внешние файлы и много чего еще. Мне был необходим только базовый функционал, который я и опишу ниже.
Небольшое замечание: для выполнения нижеследующих операций необходимо обладать правами администратора, иначе может вылететь такая ошибка.
Просмотр созданных и запущенных счетчиков
Посмотреть список сборщиков данных можно командой logman
В результате чего будет получен примерно такой вывод:
Создание счетчика производительности
Для создания счетчика я использовал следующую команду (с полным списком опций можно ознакомиться в официальной документации.):
- counter_name — имя счетчика. Может быть любым, например «explorer_cpu»
- -f — формат файла с результатами измерений
- –v — эта опция подавляет вывод версии в выходном файле
- -si — интервал. с которым будут записываться измерения
- -o — файл с результатами измерений
- -c — идентификатор счетчика производительности
Остановимся подробнее на последней опции. Чтобы понять, что вписывать в поле «counter», можно проследовать в perfmon, создать группу сборщиков данных и выбрать «Создать -> Сборщик данных». Далее выбрать «Добавить счетчик» и в появившемся окне найти интересующий нас тип счетчика.
Меня интересовало потребление cpu и памяти конкретным процессом, поэтому я использовал для измерений следующие счетчики (в расчете CPU мне помог следующий пост):
- «Processor(_Total)% User time» — процент CPU в пользовательском режиме
- «Process(application_name)% Processor time» — доля CPU приложения от пользовательского режима
- «Process(application_name)Working Set» — использование оперативной памяти процессом
Процент потребления CPU процессом можно расчитать как («Processor(_Total)% User time» * «Process(application_name)% Processor time») / (количество_процессоров * 100)
Счетчики можно записывать через пробел, тогда в выходном файле значения будут каждый в своем столбце.
В итоге приведу пример готовой команды для создания счетчика:
Запуск и остановка счетчика
Выполняются соответствующими командами:
Удаление счетчика
Удалить счетчик можно следующей командой (он обязательно должен быть перед этим остановлен):
Прежде чем перейти к коду, хотелось бы рассказать о небольшой (хотя для меня она стала довольно существенной) проблеме, которая возникла в ходе сбора метрик.
Так как собирать данные предполагалось за довольно небольшой промежуток времени (5-15 секунд), то стало понятно, что интервал сбора в 1 с (задаваемый через опцию «-si») слишком большой. Поискав на просторах интернета и в оф. документации, мне не удалось найти способ, которым этот интервал можно было уменьшить, а количество получаемых точек на графике очень хотелось увеличить. Немного поразмыслив, я решил пойти от противного — если нельзя уменьшить интервал, то можно увеличить количетство счетчиков. Таким образом, запуская подряд несколько сборщиков с интервалом в 100-500 миллисекунд, можно получить за одну секунду сколько нужно данных.
Процесс сбора данных должен был быть интегрирован в существующий автоматический тест и в конечном была написана небольшая вспомогательная обертка для выполения всех вышеуказанных действий.
Ниже представлен исходный код модуля, собирающий данные по CPU и оперативной памяти для указанного приложения с требуемой точностью.