- WMI Performance Adapter — что это за служба? (WmiApSrv.exe)
- WMI Performance Adapter — что это такое?
- WMI Performance Adapter — включать или отключать?
- Получение значений счетчиков производительности
- Windows performance data helper
- Производительность: меряй сам
- Perfmon
- Анализ загруженности оборудования для Windows
- Сбор информации по загруженности оборудования
- Настройка сборка данных в Performance Monitor (Windows Server 2012 R2)
- Анализ сохраненного замера
WMI Performance Adapter — что это за служба? (WmiApSrv.exe)
Приветствую. Часто мы хотим оптимизировать ПК путем отключения всего и вся: удаление программ, системных компонентов, отключение процессов, служб, удаление записей из автозагрузки. Но можно отключить то, из-за чего в будущем будет не работать какой-то софт. Потом придется гадать — что именно вы отключали..
WMI Performance Adapter — что это такое?
Отвечает за предоставление информации библиотеки производительности от поставщиков инструментария управления Windows (WMI) клиентским компьютерам в сети. Работает только при активном компоненте Performance Data Helper.
- Для нормальной работы данной службы нужно чтобы была включена другая — Удаленный вызов процедур (RPC).
- Отключать не стоит, оптимально всего — выставить тип запуска — вручную (в свойствах).
- Данные службы используются встроенным системой мониторинга производительности.
- Необходима программам, которые используют WMI, например System Center Operations Manager — прога для управления и мониторинга ИТ-сервисов, приложений, серверов.
Работает под процессом WmiApSrv.exe, который запускается из системной папки:
Соответственно если у вас файл расположен в другой папке, то это подозрительно — возможно вирус. Просканируйте ПК антивирусными утилитами, либо просто установите бесплатную версию Kaspersky Free (все опасные вирусы спокойно обнаруживает).
WMI Performance Adapter — включать или отключать?
Отключать не стоит. Некоторые программы могут использовать WMI, собственно об этом уже писал. На практике — действительно, лично у меня софт для мобильного интернета не работал без включенной службы.
Службу можно назвать особо-системно-программной, это я о нужности ее. Особо не встречал отзывов, что она грузит процессор, много кушает оперативки. У себя лично не наблюдал. Если такое происходит, что редкость, — стоит подождать некоторое время, возможно выполняются какие-то работы.
Вообще перед отключением чего-то в Windows стоит создать контрольную точку восстановления: откройте панель управлени (зажимаем Win + R > control panel) я, найдите значок Система > Защита системы > выбираем системный диск > нажимаем кнопку Создать.
В окошке Автозагрузки (System Configuration) галочку снимать не нужно:
В этом же окошке вы можете узнать статус службы (колонка Status).
Получение значений счетчиков производительности
В данной статье хочу показать, как можно получить значение счетчиков производительности вашего компьютера, при небольшой модификации кода можно так же получать значения счетчиков других машин.
Для получения значений использовалась библиотека PDH(Performance Data Helper) – основу которой составляет pdh.dll, которая предоставляет не очень удобный способ получения информации о производительности компонентов компьютера. В данной статье я рассматриваю пример, в котором получаю значение загруженности жестких дисков.
По началу мною были предприняты попытки получить загруженность жесткого диска при помощи API функции DeviceIoControl с применением параметра IOCTL_DISK_PERFORMANCE, к сожалению, в силу своей неопытности или ленивости мне это не удалось.
Примером реализации использования библиотеки PDH может служит программа раннее сделанная мною PDHMon, которую вы можете скачать по ссылке http://code.hut1.ru/downloads/PDHMon.zip, также в комплекте с операционной системой Windows имеется программа для просмотра и отображения значений счетчиков производительности, perfmon.msc.
Далее представлен алгоритм получения значения счетчиков производительности, а именно загруженности жестких дисков, для создания программы использовалась среда разработки MVC++ 6, тип проекта Win32 Console Application.
1. Первое что необходимо сделать, это добавить в проект необходимые для работы библиотеки заголовочные файлы:
#include
2. Подключить lib файл к проекту: #pragma comment(lib, «pdh.lib»)
3. Вызвать функцию PdhOpenQuery, тем самым создать запрос на использование счетчиков производительности.
4. Для формирования пути к счетчику производительности использовать функцию PdhLookupPerfNameByIndex, которая при вызове с определенным индексом возвращает имя или объект счетчика. Сначала нужно получить имя объекта и сохранить его, после уже вторым вызовом получаем имя счетчика. Для того чтобы узнать какой индекс нам нужен я использовал утилиту PCViewer(автор программы Сергей Холодилов), которую можно найти на сайте http://www.rsdn.ru/ . Результат работы которой, представлен на рисунках, на которых можете увидеть, откуда брать значения индексов.
Получение индекса имени объекта при помощи PCViewer.
Получение индекса имени счетчика при помощи PCViewer.
5. Далее заполняется структура PDH_COUNTER_PATH_ELEMENTS, где элементами структуры являются имя объекта(szObjectName), имя счетчика(szCounterName), имя машины(szMachineName) которое получаем при помощи вызова API функции GetComputerName.
6. Следующим шагом формируем полный путь к счетчику, при помощи функции PdhMakeCounterPath, одним из возвращаемых параметров которой будет полный путь к счетчику в формате: \\Computer\PerfObject(ParentInstance/ObjectInstance#InstanceIndex)\Counter
7. При помощи функции PdhAddCounter добавляем счетчик к нашему запросу сделанному в пункте 3.
8. После функцией PdhCollectQueryData соединяем все в одно целое.
9. И последний шаг, получаем форматированное значение счетчика функцией PdhGetFormattedCounterValue.
Windows performance data helper
JPDH — Windows Performance Data Helper for Java
JPDH is a Java library to retrieve performance counter values on Microsoft Windows using the PDH (Performance Data Helper) API and some additional features built on top of it.
Add jpdh.jar to your CLASSPATH.
Any valid PDH counter path can be used, and additional counter path using the non-PDH “PID” object can be used as well:
If you don’t have a POSIX environment under Windows, you might want to have a look at MSYS2.
Additionally, you may run the test suite using make runtest .
- 2019-09-20: version 1.1.4 — Bugfix release. Counters based on the virtual “PID” object sometimes couldn’t be initialized while lots of processes were started of stopped.
- 2017-09-14: version 1.1.3 — Bugfix release. The virtual “PID” object didn’t work on localized (eg. German) versions of Windows.
- 2016-06-08: version 1.1.2 — Bugfix release. Calling Query.removeCounter(counter) on counters associated with dead processes was throwing an exception.
- 2016-06-01: version 1.1.1 — Bugfix release. Calling Query.removeCounter(counter) on counters associated with dead processes was throwing an exception.
- 2016-04-19: version 1.1 — Additional “PID” object which maps to the “Process” object for the right process instance and index
- 2016-04-01: version 1.0 — Initial version exposing PDH features in Java
Send an email to Jérémie Roquet jroquet@arkanosis.net.
JPDH is distributed under the BSD license, see the LICENSE file.
Производительность: меряй сам
В данной примере хочу показать как можно получить значение счетчиков
производительности вашего компьютера. Наверняка вы хотели бы следить за
основными параметрами вашего компьютера, такими как загруженность процессора,
активность жестких дисков или использование памяти и сделать такую программу
самим. При небольшой модификации примера можно так же получать значения
счетчиков с других компьютеров, по локальной сети, тем самым контролируя целый
парк компьютеров.
Для получения значений счетчиков использовалась библиотека PDH (Performance
Data Helper), основу которой составляет pdh.dll — через API функции,
содержащиеся в ней, мы сможем получить доступ к данным. В данной статье
рассматривается пример получения значения загруженности жесткого диска. В
комплекте поставки операционной системы Windows уже имеется программа для
просмотра и графического отображения значений счетчиков, perfmon.msc.
Perfmon
Для создания программы использовалась среда разработки Microsoft Visual C++
6.0, тип проекта Win32 Console Application. Для получения индексов имен объектов
и имен счетчиков можно воспользоваться программой PCViewer (автор программы
Сергей Холодилов), скачать которую можно здесь:
http://www.rsdn.ru/article/baseserv/PerfCounters/code_1.zip.
Первое что необходимо сделать, это добавить в проект необходимые для работы
библиотеки заголовочные файлы:
Подключаем lib файл к проекту:
#pragma comment(lib, «pdh.lib»)
Создаем и инициализируем необходимые перемененные:
PDH_HQUERY hQuery;
CHAR szObjectName[256],szCounterName[256],szPath[256];
PDH_STATUS pdhStatus;
PDH_HCOUNTER * phCounter = (HCOUNTER*)GlobalAlloc(GPTR,sizeof(HCOUNTER));
Вызываем функцию PdhOpenQuery, тем самым создать запрос на использование
счетчиков производительности:
Для формирования пути к счетчику производительности вызываем функцию
PdhLookupPerfNameByIndex, которая при вызове с определенным индексом (в данном
примере 234) возвращает имя или объект счетчика. Сначала нужно получить имя
объекта и сохранить его, после уже вторым вызовом получаем имя счетчика:
pdhStatus = PdhLookupPerfNameByIndex(NULL,234,szObjectName,&dwSize);//-1
if(pdhStatus == ERROR_SUCCESS)
<
Получаем имя счетчика производительности:
if(pdhStatus == ERROR_SUCCESS)
<
cout
Далее заполняется структура PDH_COUNTER_PATH_ELEMENTS, где элементами
структуры являются имя объекта (szObjectName), имя счетчика (szCounterName), имя
машины (szMachineName) которое получаем при помощи вызова API функции
GetComputerName.
TCHAR szCompName[256];DWORD dwSize = sizeof(szCompName);
GetComputerName(szCompName,&dwSize); cout
Следующим шагом формируем полный путь к счетчику, при помощи функции
PdhMakeCounterPath, одним из возвращаемых параметров которой будет полный путь к
счетчику в формате:
\\Computer\PerfObject(ParentInstance/ObjectInstance#InstanceIndex)\Counter.
if(pdhStatus == ERROR_SUCCESS)
<
cout
При помощи функции PdhAddCounter добавляем счетчик к нашему запросу:
pdhStatus = PdhAddCounter(hQuery,szPath,0,phCounter);
if(pdhStatus == ERROR_SUCCESS)
<
В цикле выводим значения счетчика:
После функцией PdhCollectQueryData соединяем все в одно целое:
if(PdhCollectQueryData(hQuery) == ERROR_SUCCESS)
<
cout
И последний шаг — получаем форматированное значение счетчика функцией
PdhGetFormattedCounterValue:
pdhStatus = PdhGetFormattedCounterValue(*phCounter,PDH_FMT_DOUBLE,&dwType,&pdhValue);
if(pdhStatus == ERROR_SUCCESS)
<
cout
Небольшая задержка перед получением нового значения:
Корректно завершаем обращение к PDH:
GlobalFree(phCounter);
PdhRemoveCounter(phCounter);
PdhCloseQuery(hQuery);
Результат работы программы представлен на рисунке:
С помощью данного примера вы сможете контролировать значения основных
показателей производительности ваше компьютера, так же применение данной
технологии позволить расширить функциональные возможности ваших приложений.
Анализ загруженности оборудования для Windows
Для своевременного обнаружения узких мест в оборудовании необходимо проводить постоянный мониторинг загруженности всех основных аппаратных компонентов системы. К ним в первую очередь относятся:
- Все рабочие сервера кластера 1С:Предприятия
- Сервер СУБД
- Клиентские рабочие станции, работающие под большой нагрузкой
Для каждого из этих компьютеров необходимо настроить сбор информации по загруженности оборудования.
Сбор информации по загруженности оборудования
Во время работы системы рекомендуется осуществлять постоянный мониторинг и запись основных показателей загруженности оборудования. Для этого можно использовать разные средства, в данной статье будет рассказано, как это можно сделать с помощью Performance Monitor, входящего в состав операционной системы Windows, и ЦКК – Центра контроля качества, типовой конфигурации, входящая в Корпоративный инструментальный пакет.
Настройка сборка данных в Performance Monitor (Windows Server 2012 R2)
Для запуска Performance Monitor выберите соответствующий пункт меню раздела Administrative Tools контрольной панели Windows.
Добавьте в список наборов счетчиков (Data Collector Sets) новый набор (User Defined – пользовательский):
Настройка будет осуществляться вручную – в диалоговом окне нужно выбрать соответствующий пункт и нажать «Далее»:
Выберите, какие именно данные будут собираться. Нас интересуют Счетчики производительности:
На следующем шаге выбираются сами счетчики, которые будут входить в набор.
Мы рекомендуем в обязательном порядке собирать данные по следующим счетчикам:
«\Processor(_Total)\Interrupts/sec»
«\LogicalDisk(_Total)\% Free Space»
«\Memory\Available Mbytes»
«\PhysicalDisk(_Total)\Avg. Disk Queue Length»
«\PhysicalDisk(_Total)\Avg. Disk Sec/Read»
«\PhysicalDisk(_Total)\Avg. Disk Sec/Write»
«\Processor(_Total)\% Idle Time»
«\Processor(_Total)\% Processor Time»
«\Processor(_Total)\% User Time»
«\System\Context Switches/sec»
«\System\File Read Bytes/sec»
«\System\Context Switches/sec»
«\System\File Read Bytes/sec»
«\System\File Write Bytes/sec»
«\System\Processes»
«\System\Processor Queue Length»
«\System\Threads»
Состав счетчиков может меняться в зависимости от роли компьютера. Например, для сервера приложений 1С:Предприятие к перечисленным выше стоит добавить показатели работы процессов 1с:Предприятие:
«\Process(«1cv8*»)\% Processor Time»
«\Process(«1cv8*»)\Private Bytes»
«\Process(«1cv8*»)\Virtual Bytes»
«\Process(«ragent*»)\% Processor Time»
«\Process(«ragent*»)\Private Bytes»
«\Process(«ragent*»)\Virtual Bytes»
«\Process(«rphost*»)\% Processor Time»
«\Process(«rphost*»)\Private Bytes»
«\Process(«rphost*»)\Virtual Bytes»
«\Process(«rmngr*»)\% Processor Time»
«\Process(«rmngr*»)\Private Bytes»
«\Process(«rmngr*»)\Virtual Bytes»
Обратите внимание, что имена счетчиков могут незначительно отличаться в зависимости от версии вашей операционной системы
Рекомендуемая частота получения значений для рабочей системы – один раз в 15 секунд. В нагрузочных тестах рекомендуем собирать счетчики чаще, например, один раз в 1 секунду, т.к. длительность каждого непрерывного нагрузочного теста обычно не превышает десятка часов, а анализировать более детальные данные удобнее.По окончании выбора нажмите «Далее», укажите директорию хранения логов, при необходимости – пользователя, от имени которого будет запускаться процесс сборщика, и сохраните набор.
Откройте для дальнейшего редактирования его свойства (например, кликнув по нему в списке двойным щелчком мыши):
Можно выбрать формат файла логирования: бинарный удобен, если планируется анализировать графические данные, CSV – если планируется как-либо программно обрабатывать данные. В данном примере выбран бинарный.
На закладке «Files» можно настроить шаблон имени файлов и режим записи. Для сохраненного набора также можно настроить расписание и задать ограничения и условия окончания сбора.
В данном случае замер не стартует автоматически, но на продуктивных площадках рекомендуется не забыть настроить планировщик задач на автозапуск выбранного счетчика, например, каждый час, если сбор данных ещё не запущен.
После сохранения можно запустить замер (при помощи кнопки Start контекстного меню).
Создать набор счетчиков Performance Monitor и управлять сбором данных можно не только интерактивно, но и при помощи консольной утилиты logman. Подробно работа с ней описана на сайте Microsoft https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/logman
Команда создания набора будет выглядеть так:
logman create counter 1C_counter -f bincirc -c «\Processor(_Total)\Interrupts/sec» «\LogicalDisk(_Total)\% Free Space» «\Memory\Available Mbytes» «\PhysicalDisk(_Total)\Avg. Disk Queue Length» «\PhysicalDisk(_Total)\Avg. Disk Sec/Read» «\PhysicalDisk(_Total)\Avg. Disk Sec/Write» «\Processor(_Total)\% Idle Time» «\Processor(_Total)\% Processor Time» «\Processor(_Total)\% User Time» «\System\Context Switches/sec» «\System\File Read Bytes/sec» «\System\Context Switches/sec» «\System\File Read Bytes/sec» «\System\File Write Bytes/sec» «\System\Processes» «\System\Processor Queue Length» «\System\Threads» -si 5 -v mmddhhmm
Анализ сохраненного замера
Для просмотра данных откройте бинарный файл замера .blg, по умолчанию Windows откроет такой тип при помощи Performance Monitor:
Выделить график, относящийся к конкретному счетчику, можно, встав на линию графика либо на строку счетчика в списке снизу. Для него при этом отобразятся среднее, минимальное, максимальное и последнее значение за период замера:
Интерес представляют, как правило, среднее значение и «пики» — максимум / минимум в зависимости от смысла счетчика.
Ниже в таблице приведены описания и предельные значения некоторых из них: