Диагностика проблем со скоростью реагирования приложений на узлах сеансов удаленных рабочих столов с помощью счетчиков производительности
- Статья
- Чтение занимает 5 мин
Область применения: Windows Server 2022, Windows Server 2019, Windows 10
Плохая производительность приложений (когда приложения работают медленно или не отвечают) — одна из самых сложных проблем в плане диагностики. В большинстве случаев диагностику начинают со сбора данных о ЦП, памяти, дисковых операциях ввода/вывода и других метриках, после чего пытаются выяснить причину проблемы с помощью таких средств, как Windows Performance Analyzer. К сожалению, в большинстве случаев эти данные не помогают определить основную причину, так как данные счетчиков потребления ресурсов часто существенно колеблются. Из-за этого трудно сопоставить прочитанные данные с обнаруженной проблемой.
Примечание
Счетчик задержки ввода данных пользователем совместим только с такими ОС:
- Windows Server 2019 или более поздней версии;
- Windows 10 версии 1809 или более поздней.
Счетчик задержки ввода данных пользователем может помочь быстро определить основную причину медленной производительности в рамках сеанса удаленного рабочего стола. Этот счетчик измеряет, какой период времени ввод данных пользователем (например, с помощью мыши или клавиатуры) остается в очереди перед тем, как процесс его подхватит. Он работает в локальных и удаленных сеансах.
На следующем рисунке показано примерное представление потока ввода данных пользователем, поступающего от клиента к приложению.
Счетчик задержки ввода данных пользователем измеряет максимальную разницу (в пределах интервала времени) между тем, когда ввод помещается в очередь и когда приложение получает его в традиционном цикле обработки сообщений, как показано на следующей блок-схеме.
Следует отметить, что этот счетчик сообщает максимальную задержку ввода данных пользователем в пределах настраиваемого интервала. Это самое продолжительное время, за которое ввод поступает в приложение, что может повлиять на скорость выполнения важных видимых действий, таких как ввод.
Например, в приведенной ниже таблице задержка ввода данных пользователем в пределах этого интервала будет составлять 1000 мс. Счетчик сообщает наибольшую задержку ввода данных пользователем в пределах интервала, потому что пользователь рассматривает медленную реакцию как самое медленное время ввода (максимальное), а не как среднюю скорость всех вводов данных.
Номер | 0 | 1 | 2 |
---|---|---|---|
Задержка | 16 мс | 20 мс | 1000 мс |
Включение новых счетчиков производительности и их использование
Чтобы использовать эти новые счетчики производительности, необходимо сначала включить раздел реестра, выполнив следующую команду:
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v "EnableLagCounter" /t REG_DWORD /d 0x1 /f
Примечание
Если вы используете Windows 10, версия 1809 или более поздняя, либо Windows Server, версия 2019 или более поздняя, вам не требуется включать раздел реестра.
После этого нужно перезапустить сервер. Затем откройте системный монитор и щелкните значок плюс (+), как показано на следующем снимке экрана.
После этого появится диалоговое окно «Добавить счетчики», где можно выбрать пункт User Input Delay per Process (Задержка ввода данных пользователем на процесс) или User Input Delay per Session (Задержка ввода данных пользователем на сеанс).
После того как вы выберете вариант User Input Delay per Process (Задержка ввода данных пользователем на процесс), в одноименном разделе отобразятся экземпляры выбранного объекта (другими словами, процессы) в формате SessionID:ProcessID <Process Image>
.
Например, если Калькулятор выполняется в сеансе с идентификатором 1, вы увидите 1:4232 <Calculator.exe>
.
Примечание
Учитываются не все процессы. Вы не увидите процессы, запущенные как системные.
Счетчик начинает отправку отчетов о задержке ввода данных пользователем сразу после того, как вы его добавите. Обратите внимание, что максимальный масштаб по умолчанию — 100 (мс).
Теперь давайте рассмотрим счетчик задержки ввода данных пользователем на сеанс. Для каждого идентификатора сеанса есть экземпляры, и их счетчики показывают задержку ввода данных пользователем для любого процесса в указанном сеансе. Кроме того, есть еще два экземпляра — «Макс.» (максимальная задержка ввода данных пользователем во всех сеансах) и «Средний» (средняя задержка во всех сеансах).
В этой таблице представлен визуальный пример этих экземпляров. (Те же сведения можно получить в системном мониторе, переключившись на тип графа «Отчет».)
Тип счетчика | Имя экземпляра | Сообщенная задержка (мс) |
---|---|---|
Задержка ввода данных пользователем на процесс | 1:4232 <Calculator.exe> | 200 |
Задержка ввода данных пользователем на процесс | 2:1000 <Calculator.exe> | 16 |
Задержка ввода данных пользователем на процесс | 1:2000 <Calculator. exe> | 32 |
Задержка ввода данных пользователем на сеанс | 1 | 200 |
Задержка ввода данных пользователем на сеанс | 2 | 16 |
Задержка ввода данных пользователем на сеанс | Среднее | 108 |
Задержка ввода данных пользователем на сеанс | Макс. | 200 |
Счетчики, используемые в перегруженной системе
Теперь давайте рассмотрим, что же отобразится в отчете, если производительность приложения снижена. На следующей диаграмме приведены показатели пользователей, удаленно работающих в Microsoft Word. В этом случае производительность сервера узла сеансов удаленных рабочих столов (RDSH) ухудшается по мере того, как входит большее количество пользователей.
Вот что представляют линии на диаграмме:
- Розовая линия показывает количество сеансов, в которые выполнен вход на сервере.
- Красная линия показывает потребление ЦП.
- Зеленая линия — это максимальная задержка ввода данных пользователем во всех сеансах.
- Синяя линия (отображается как черная на этой диаграмме) представляет среднюю задержку ввода данных пользователем во всех сеансах.
Можно заметить, что присутствует взаимосвязь между пиками потребления ЦП и задержкой ввода данных пользователем: задержка ввода данных пользователем повышается по мере увеличения потребления ЦП. Кроме того, по мере добавления в систему большего количества пользователей потребление ЦП приближается к 100 %, что приводит к более частым пикам задержки ввода данных пользователем. Хотя этот счетчик очень полезен в случаях, когда серверу не хватает ресурсов, его также можно использовать для отслеживания задержки ввода данных пользователем, связанной с определенным приложением.
Параметры конфигурации
При использовании этого счетчика производительности следует помнить, что он сообщает задержку ввода данных пользователем через определенный интервал — 1000 мс по умолчанию. Если задать для свойства интервала выборки счетчика производительности (как показано на следующем снимке экрана) другое значение, полученное значение будет неправильным.
Чтобы устранить эту проблему, можно задать для следующего раздела реестра нужный интервал (в миллисекундах). Например, если мы изменим значение параметра Sample every x seconds (Выполнять выборку каждые x секунд) на 5 с, то для этого раздела нужно задать значение 5000 мс.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server] "LagCounterInterval"=dword:00005000
Примечание
Если вы используете Windows 10, версия 1809 или более поздняя, либо Windows Server, версия 2019 или более поздняя, не нужно задавать параметр LagCounterInterval, чтобы исправить счетчик производительности.
Мы также добавили несколько разделов, которые могут оказаться полезными, под тем же разделом реестра.
LagCounterImageNameFirst — задайте для этого раздела значение DWORD 1
(значение по умолчанию (0) или раздел не существует). Это изменит имена счетчиков на «Image Name <SessionID:ProcessId>». Например, «explorer <1:7964>». Это полезно, если вы хотите сортировать изображения по имени.
LagCounterShowUnknown — задайте для этого раздела значение DWORD 1
(значение по умолчанию (0) или раздел не существует). В результате будут показаны все процессы, запущенные как службы или система. Для некоторых процессов в качестве названия сеанса будет отображаться «?».
Вот что будет, если вы включите оба раздела:
Использование новых счетчиков со сторонними инструментами
Инструменты мониторинга могут использовать этот счетчик, как описано в руководстве Использование счетчиков производительности.
Поделитесь своим мнением
Вы можете отправить отзыв об этом компоненте через Центр отзывов. Выберите Приложения > Все другие приложения и добавьте»Счетчики производительности RDS — системный монитор» в заголовок публикации.
Сведения о счетчиках производительности — Win32 apps
- Статья
- Чтение занимает 9 мин
Windows счетчики производительности предоставляют высокоуровневый уровень абстракции с согласованным интерфейсом для сбора различных системных данных, таких как процессор, память и статистика использования диска. Системные администраторы используют счетчики производительности для мониторинга проблем с производительностью или поведением. Разработчики программного обеспечения используют счетчики производительности для проверки использования ресурсов своих компонентов.
Важно!
Windows счетчики производительности оптимизированы для обнаружения и сбора административных и диагностических данных. Они не подходят для сбора данных высокой частоты или профилирования приложений, так как они не предназначены для сбора более одного раза в секунду. Для доступа к системным сведениям с более низкими затратами можно использовать более прямые API, например вспомогательные функции состояния процесса, GlobalMemoryStatusEx, GetSystemTimes или GetProcessTimes. Для профилирования можно собирать журналы трассировки событий Windows с данными профилирования системы с помощью tracelog.exe с -critsec
помощью , -eflag
-dpcisr
или -ProfileSource
параметров или использовать профилирование счетчиков оборудования.
Примечание
Не путайте счетчики производительности Windows с API QueryPerformanceCounter. Windows счетчики производительности обеспечивают высокоуровневую абстракцию для многих видов системных сведений. Функция QueryPerformanceCounter предоставляет оптимизированный доступ к метке времени высокой точности.
Приступая к работе
- Используйте средства счетчика производительности , если вы хотите собирать или просматривать данные о производительности из системы.
- Используйте API сбора счетчиков производительности , если требуется написать скрипт или программу, которая собирает данные о производительности из локальной системы.
- Используйте классы счетчиков производительности WMI , если требуется собирать данные о производительности из локальной или удаленной системы с помощью WMI.
- Используйте API поставщика счетчиков производительности , если требуется опубликовать данные о производительности из программного компонента.
Основные понятия
Система счетчиков производительности Windows организована по потребителям, поставщикам, наборам счетчиков, счетчикам, экземплярам и значениям счетчиков.
Потребитель — это программный компонент, который использует данные о производительности. Windows включает несколько встроенных средств, которые используют данные о производительности. К ним относятся диспетчер задач, монитор ресурсов, Монитор производительности, typeperf.exe, logman.exe и relog.exe. Разработчики могут создавать скрипты и приложения, которые обращаются к счетчикам производительности с помощью API счетчиков производительности.
Поставщик — это программный компонент, который создает и публикует данные о производительности. Поставщик публикует данные для одного или нескольких наборов счетчиков. Например, система базы данных может зарегистрировать себя в качестве поставщика данных производительности.
- Поставщик версии 1 — это программный компонент, который публикует данные о производительности с помощью библиотеки DLL производительности, которая выполняется в процессе потребителя. Поставщик версии 1 устанавливается в систему через
. ini
файл. Архитектура поставщика версии 1 не рекомендуется. Новые поставщики должны использовать архитектуру поставщика версии 2. - Поставщик версии 2 — это программный компонент, который публикует данные о производительности с помощью API поставщика счетчиков производительности. Поставщик версии 2 устанавливается в систему с помощью xml-файла манифеста
.man
.
Набор счетчиков — это группировка данных о производительности в поставщике. Набор счетчиков имеет имя и один или несколько счетчиков. Сбор данных из набора счетчиков возвращает несколько экземпляров. В некоторых Windows API наборы счетчиков называются объектами производительности. Например, поставщик данных производительности для системы базы данных может предоставлять набор счетчиков для статистики по каждой базе данных.
Счетчик — это определение одного фрагмента данных производительности. Счетчик имеет имя и тип. Например, набор счетчиков «статистика по базе данных» может содержать счетчик с именем «транзакции в секунду» с типом PERF_COUNTER_COUNTER
.
Экземпляр — это сущность, о которой передаются данные о производительности. Экземпляр имеет имя (строку) и одно или несколько значений счетчика. Например, набор счетчиков «статистика по каждой базе данных» может содержать один экземпляр для каждой базы данных. Имя экземпляра будет именем базы данных, и каждый экземпляр будет содержать значения счетчиков для счетчиков «транзакции в секунду», «использование памяти» и «использование диска».
Значение счетчика — это значение одного фрагмента данных счетчика производительности. Значение счетчика — это целое число без знака, 32-разрядное или 64-разрядное в зависимости от типа соответствующего счетчика. При разговоре об экземплярезначение счетчика иногда может вызываться счетчиком или значением.
Совет
Может быть полезно связать термины счетчика производительности с более знакомыми терминами электронной таблицы. Набор счетчиков похож на таблицу. Счетчик похож на столбец. Экземпляр похож на строку. Значение счетчика похоже на ячейку в таблице.
Наборы счетчиков с одним экземпляром всегда содержат данные для одного экземпляра. Это распространено для наборов счетчиков, сообщающих о глобальной статистике системы. Например, Windows имеет встроенный набор счетчиков с одним экземпляром с именем Memory, который сообщает об использовании глобальной памяти.
Наборы счетчиков с несколькими экземплярами содержат данные для переменного числа экземпляров. Это распространено для наборов счетчиков, которые сообщают о сущностях в системе. Например, Windows имеет встроенный набор счетчиков с несколькими экземплярами с именем «Сведения о процессоре», который сообщает один экземпляр для каждого установленного ЦП.
Потребители периодически собирают и записывают данные из набора счетчиков поставщика. Например, потребитель может собирать данные один раз в секунду или один раз в минуту. Собранные данные называются примером. Пример состоит из меток времени вместе с данными для экземпляров набора счетчиков. Данные для каждого экземпляра включают имя экземпляра (строку) и набор значений счетчика (целые числа, по одному значению для каждого счетчика в наборе счетчиков).
Имена экземпляров обычно должны быть уникальными в образце, т. е. поставщик не должен возвращать два экземпляра с тем же именем, что и часть одного примера. Некоторые старые поставщики не следуют этому правилу, поэтому потребители должны иметь возможность допускать неуниковые имена экземпляров. Имена экземпляров не зависят от регистра, поэтому экземпляры не должны иметь имена, отличающиеся только в случае.
Примечание
В целях обратной совместимости набор счетчиков Process возвращает имена неуникированных экземпляров на основе имени EXE-файла. Это может привести к путанице результатов, особенно если процесс с неуникальным именем запускается или завершает работу, так как обычно это приведет к сбою данных из-за неправильного сопоставления имен экземпляров между примерами. Потребители набора счетчиков Process должны иметь возможность допускать эти неуниковые имена экземпляров и результирующий сбой данных.
В Windows 10 20h3 и более поздних версий можно использовать набор счетчиковProcess V2
, чтобы избежать этой проблемы.
Имена экземпляров должны быть стабильными в примерах, т. е. поставщик должен использовать одно и то же имя экземпляра для одной сущности при каждом сборе набора счетчиков.
Каждый счетчик имеет тип. Тип счетчика указывает тип необработанного значения счетчика (32-разрядное целое число без знака или 64-разрядное целое число без знака). Тип счетчика также указывает, что представляет необработанное значение счетчика, которое определяет способ обработки необработанного значения для создания полезной статистики.
Хотя некоторые типы счетчиков просты и имеют необработанное значение, которое напрямую полезно, многие типы счетчиков требуют дополнительной обработки для создания полезного форматированного значения. Для создания форматированного значения некоторые типы счетчиков требуют необработанных значений из двух выборок, некоторые типы счетчиков требуют меток времени, а некоторые типы счетчиков требуют необработанных значений из нескольких счетчиков. Пример:
PERF_COUNTER_LARGE_RAWCOUNT
— это 64-разрядное необработанное значение, которое не требует использования обработки. Он подходит для значений до точки во времени, таких как «Байты используемой памяти».PERF_COUNTER_RAWCOUNT_HEX
— это 32-разрядное необработанное значение, требующее использования только простого шестнадцатеричного форматирования. Он подходит для сведений о точке во времени или для идентификации таких сведений, как «Флаги» или «Базовый адрес».PERF_COUNTER_BULK_COUNT
— это 64-разрядное необработанное значение, указывающее количество событий и используемое для вычисления скорости возникновения событий. Чтобы быть полезным, этот тип счетчика требует двух выборок, разделенных по времени. Форматированное значение — это частота событий, т. е. количество раз, когда событие произошло в секунду в течение интервала между двумя выборками. В двух примерахs0
иs1
форматированное значение (скорость событий) вычисляется как(s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds)
.
Ожидается, что поставщики будут вести себя так, как если бы они не были без отслеживания состояния, т. е. сбор данных из набора счетчиков не должен заметно влиять на состояние поставщика. Например, поставщик не должен сбрасывать значения счетчиков до 0 при сборе набора счетчиков и не следует использовать метку времени предыдущей коллекции для настройки значений в текущей коллекции. Вместо этого он должен предоставлять простые необработанные значения счетчиков с точными типами, чтобы потребитель смог вычислить полезную статистику на основе необработанных значений и меток времени.
Архитектура API производительности
Потребители счетчиков производительности включают:
- Предоставляемые корпорацией Майкрософт приложения, такие как диспетчер задач, монитор ресурсов, Монитор производительности и typeperf. exe.
- Предоставляемые корпорацией Майкрософт высокоуровневые поверхности API, которые предоставляют данные счетчиков производительности, такие как классы производительности WMI.
- Собственные приложения или скрипты, использующие API-интерфейсы потребителя счетчика производительности.
Большинство потребителей счетчиков производительности используют API из PDH.dll для сбора данных о производительности. PDH управляет множеством сложных аспектов сбора счетчиков производительности, таких как анализ запросов, сопоставление экземпляров в нескольких примерах и вычисление отформатированных значений из необработанных данных счетчика. Реализация PDH использует API реестра при использовании данных от поставщика версии 1 и использует API-интерфейсы потребителя версии 2 при использовании данных от поставщика версии 2.
Некоторые старые потребители счетчиков производительности используют API реестра для сбора данных о производительности из специального HKEY_PERFORMANCE_DATA
раздела реестра. Это не рекомендуется для нового кода, так как обработка данных из реестра является сложной и подверженной ошибкам. Реализация API реестра напрямую поддерживает сбор данных от поставщиков версии 1. Он косвенно поддерживает сбор данных от поставщиков версии 2 через уровень перевода, использующий API-интерфейсы потребителей версии 2.
Некоторые потребители счетчиков производительности используют функции потребителя PerfLib версии 2 для прямого доступа к данным от поставщиков версии 2. Это сложнее, чем использование данных с помощью API PDH, но этот подход может быть полезен, если API PDH не могут использоваться из-за проблем производительности или зависимостей. Реализация PerfLib версии 2 напрямую поддерживает сбор данных от поставщиков версии 2. Он не поддерживает сбор данных от поставщиков версии 1.
Примечание
Windows OneCore не включает PDH.dll и не включает поддержку использования данных счетчика производительности через API реестра. Потребители, работающие на OneCore, должны использовать функции потребителя PerfLib версии 2.
Поставщики версии 1 реализуются в виде библиотеки DLL поставщика, загруженной в процесс потребителя. Реализация API реестра управляет загрузкой библиотеки DLL поставщика, вызовом библиотеки DLL для сбора данных о производительности и выгрузки библиотеки DLL соответствующим образом. Библиотека DLL поставщика отвечает за сбор данных о производительности соответствующим образом, например с помощью обычных Windows API, RPC, именованных каналов, общей памяти или других механизмов взаимодействия между процессами.
Поставщики версии 2 реализуются как программа пользовательского режима (часто служба Windows) или драйвер в режиме ядра. Обычно код поставщика данных производительности интегрируется непосредственно в существующий компонент (т. е. драйвер или служба сообщает статистику о себе). Реализация PerfLib версии 2 управляет запросами и ответами через расширение ядра PCW.sys, поэтому поставщику обычно не нужно реализовывать межпроцессное взаимодействие для предоставления данных о производительности.
Примечание
Windows API и средства счетчика производительности включают ограниченную поддержку доступа к счетчикам производительности с других компьютеров через удаленный реестр (для поставщиков версии 1) и RPC (для поставщиков версии 2). Эту поддержку часто трудно использовать с точки зрения элементов управления проверкой подлинности (средства и API могут проходить проверку подлинности только как текущий пользователь), а также с точки зрения конфигурации системы (необходимые конечные точки и службы отключены по умолчанию). Во многих случаях лучше получить доступ к счетчикам производительности удаленных систем через WMI , а не через встроенную поддержку удаленного доступа.
Аудитория разработчиков
Счетчики производительности часто используются администраторами для выявления проблем с производительностью или аномального поведения систем, разработчиками для изучения использования ресурсов компонентов программного обеспечения и отдельными пользователями, чтобы понять, как работают программы в своей системе. Использование может происходить с помощью таких средств графического пользовательского интерфейса, как диспетчер задач или Монитор производительности, такие средства командной строки, как typeperf.exe или logman.exe, с помощью скриптов с помощью WMI и PowerShell, или через C/C++ и .NET API.
Поставщики счетчиков производительности обычно реализуются как драйверы в режиме ядра или службы пользовательского режима. Поставщики счетчиков производительности обычно записываются в C или C++.
Требования к среде выполнения
Сведения о требованиях времени выполнения для определенного элемента программирования см. в разделе Requirements на справочной странице этого элемента.
Сведения о журнале версий см. в статье «Новые возможности».
См. также раздел
Использование счетчиков производительности
Справочник по счетчикам производительности
О счетчиках производительности — приложения Win32
- Статья
- 9 минут на чтение
Счетчики производительности Windows обеспечивают уровень абстракции высокого уровня с согласованным интерфейсом для сбора различных системных данных, таких как статистика использования процессора, памяти и диска. Системные администраторы используют счетчики производительности для отслеживания проблем с производительностью или поведением. Разработчики программного обеспечения используют счетчики производительности для проверки использования ресурсов своих компонентов.
Важно
Счетчики производительности Windows оптимизированы для обнаружения и сбора административных/диагностических данных. Они не подходят для сбора данных с высокой частотой или для профилирования приложений, поскольку они не предназначены для сбора чаще одного раза в секунду. Для более простого доступа к системной информации вы можете предпочесть более прямые API, такие как Process Status Helper , GlobalMemoryStatusEx , GetSystemTimes или . GetProcessTimes . Для профилирования вы можете собирать журналы ETW с данными профилирования системы, используя tracelog.exe с параметрами -critsec
, -dpcisr
, -eflag
или -ProfileSource
, или вы можете использовать Hardware Counter20 Profiling. .
Примечание
Не путайте счетчики производительности Windows с API QueryPerformanceCounter . Счетчики производительности Windows обеспечивают высокоуровневую абстракцию многих видов системной информации. Функция QueryPerformanceCounter обеспечивает оптимизированный доступ к высокоточной метке времени.
Приступая к работе
- Используйте Инструменты счетчика производительности, если вы хотите собрать или просмотреть данные о производительности системы.
- Используйте API сбора счетчиков производительности, если вы хотите написать сценарий или программу, которая собирает данные о производительности из локальной системы.
- Используйте классы счетчиков производительности WMI, если вы хотите собирать данные о производительности из локальной или удаленной системы с помощью WMI.
- Используйте API-интерфейсы поставщиков счетчиков производительности, если вы хотите опубликовать данные о производительности из вашего программного компонента.
Концепции
Система счетчиков производительности Windows состоит из потребителей , поставщиков , наборов счетчиков , счетчиков , экземпляров и значений счетчиков .
Потребитель — это программный компонент, использующий данные о производительности. Windows включает несколько встроенных инструментов, использующих данные о производительности. К ним относятся диспетчер задач, монитор ресурсов, монитор производительности, typeperf.exe, logman.exe и relog.exe. Разработчики могут писать сценарии и приложения, которые получают доступ к счетчикам производительности через API-интерфейсы счетчиков производительности.
Поставщик — это программный компонент, который генерирует и публикует данные о производительности. Поставщик будет публиковать данные для одного или нескольких наборов счетчиков . Например, система базы данных может зарегистрироваться как поставщик данных о производительности.
- Провайдер V1 — это программный компонент, который публикует данные о производительности через библиотеку производительности, которая запускается в процессе потребителя. Поставщик V1 устанавливается в систему через файл
.ini
. Архитектура провайдера V1 устарела. Новые провайдеры должны использовать архитектуру провайдеров V2. - Поставщик V2 — это программный компонент, который публикует данные о производительности через API поставщика счетчиков производительности. Поставщик V2 устанавливается в систему с помощью файла
.man
(XML-манифест).
Набор счетчиков — это группа данных о производительности в поставщике. Набор счетчиков имеет имя и один или несколько счетчиков . Сбор данных из набора счетчиков возвращает число экземпляров . В некоторых API Windows наборы счетчиков называются объекты производительности . Например, поставщик данных о производительности для системы баз данных может предоставить набор счетчиков для статистики по каждой базе данных.
Счетчик — это определение единого фрагмента данных о производительности. Счетчик имеет имя и тип. Например, набор счетчиков «статистика по базе данных» может содержать счетчик с именем «транзакций в секунду» с типом PERF_COUNTER_COUNTER
.
Экземпляр — это объект, о котором сообщаются данные о производительности. У экземпляра есть имя (строка) и один или несколько значения счетчика . Например, набор счетчиков «статистика для каждой базы данных» может содержать один экземпляр для каждой базы данных. Имя экземпляра будет именем базы данных, и каждый экземпляр будет содержать значения счетчиков для «транзакций в секунду», «использования памяти» и «использования диска».
Значение счетчика — это значение отдельного фрагмента данных счетчика производительности. Значение счетчика представляет собой целое число без знака, 32-битное или 64-битное, в зависимости от типа соответствующего счетчика. Говоря о экземпляр , значение счетчика иногда может называться счетчиком или значением .
Совет
Может оказаться полезным связать термины счетчика производительности с более знакомыми терминами электронных таблиц. Набор счетчиков похож на стол. Счетчик похож на столбец. Экземпляр похож на строку. Значение счетчика похоже на ячейку в таблице.
Наборы счетчиков одного экземпляра всегда содержат данные только для одного экземпляра. Это характерно для наборов счетчиков, которые сообщают системную глобальную статистику. Например, в Windows есть встроенный набор счетчиков с одним экземпляром под названием «Память», который сообщает об использовании глобальной памяти.
Наборы счетчиков с несколькими экземплярами содержат данные для переменного числа экземпляров. Это характерно для наборов счетчиков, которые сообщают об объектах в системе. Например, в Windows есть встроенный набор счетчиков с несколькими экземплярами под названием «Информация о процессоре», который сообщает об одном экземпляре для каждого установленного ЦП.
Потребители будут периодически собирать и записывать данные из набора счетчиков поставщика. Например, потребитель может собирать данные раз в секунду или раз в минуту. Собранные данные называются образец . Образец состоит из меток времени вместе с данными для экземпляров набора счетчиков. Данные для каждого экземпляра включают имя экземпляра (строка) и набор значений счетчика (целые числа, по одному значению для каждого счетчика в наборе счетчиков).
Имена экземпляров обычно должны быть уникальными в пределах выборки, т. е. поставщик не должен возвращать два экземпляра с одинаковым именем как часть одной выборки. Некоторые старые поставщики не следуют этому правилу, поэтому потребители должны иметь возможность допускать неуникальные имена экземпляров. Имена экземпляров не чувствительны к регистру, поэтому имена экземпляров не должны отличаться только регистром.
Примечание
В целях обеспечения обратной совместимости набор счетчиков «Процесс» возвращает неуникальные имена экземпляров на основе имени файла EXE. Это может привести к запутанным результатам, особенно когда процесс с неуникальным именем запускается или останавливается, поскольку это обычно приводит к сбоям данных из-за неправильного сопоставления имен экземпляров между выборками. Потребители набора счетчиков «Процесс» должны быть в состоянии допускать эти неуникальные имена экземпляров и возникающие в результате сбои данных.
В Windows 10 20х3 и более поздних версиях можно использовать Обработайте V2
counterset, чтобы избежать этой проблемы.
Имена экземпляров должны быть стабильными для разных образцов, т. е. поставщик должен использовать одно и то же имя экземпляра для одного и того же объекта каждый раз при сборе набора счетчиков.
Каждый счетчик имеет тип. Тип счетчика указывает тип необработанного значения счетчика (либо беззнаковое 32-разрядное целое число, либо беззнаковое 64-разрядное целое число). Тип счетчика также указывает, что представляет необработанное значение счетчика, что определяет способ обработки необработанного значения для получения полезной статистики.
В то время как некоторые типы счетчиков просты и имеют необработанное значение, которое непосредственно полезно, многие типы счетчиков требуют дополнительной обработки для создания полезного значения в формате . Для создания форматированного значения некоторым типам счетчиков требуются необработанные значения из двух выборок, некоторым типам счетчиков требуются временные метки, а некоторым типам счетчиков требуются необработанные значения из нескольких счетчиков. Например:
-
PERF_COUNTER_LARGE_RAWCOUNT
— это 64-битное необработанное значение, которое не требует обработки. Это подходит для значений на момент времени, таких как «байты используемой памяти». -
PERF_COUNTER_RAWCOUNT_HEX
— это 32-битное необработанное значение, для использования которого требуется только простое шестнадцатеричное форматирование. Он подходит для моментальной или идентифицирующей информации, такой как «Флаги» или «Базовый адрес». -
PERF_COUNTER_BULK_COUNT
— это 64-битное необработанное значение, которое указывает количество событий и используется для вычисления скорости, с которой происходят события. Чтобы быть полезным, этот тип счетчика требует двух выборок, разделенных во времени. Отформатированное значение представляет собой частоту событий, т. е. количество раз, когда событие происходило в секунду в течение интервала между двумя выборками. Даны две выборкиs0
иs1
форматированное значение (частота событий) будет вычисляться как(s1. EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds)
.
Ожидается, что поставщики будут вести себя так, как будто они не имеют состояния, т. е. сбор данных из набора счетчиков не должен заметно влиять на состояние поставщика. Например, поставщик не должен сбрасывать значения счетчика на 0 при сборе набора счетчиков и не должен использовать отметку времени предыдущего сбора для корректировки значений в текущем наборе. Вместо этого он должен предоставлять простые необработанные значения счетчиков с точными типами, чтобы потребитель мог вычислять полезную статистику на основе необработанных значений и их временных меток.
Архитектура API-интерфейса производительности
К потребителям счетчиков производительности относятся:
- Приложения Microsoft, такие как диспетчер задач, монитор ресурсов, монитор производительности и typeperf.exe.
- Предоставленные корпорацией Майкрософт поверхности API высокого уровня, предоставляющие данные счетчиков производительности, такие как классы производительности WMI.
- Ваши собственные приложения или сценарии, использующие потребительские API-интерфейсы счетчиков производительности.
Большинство потребителей счетчиков производительности используют API из PDH.dll для сбора данных о производительности. PDH управляет многими сложными аспектами сбора счетчиков производительности, такими как синтаксический анализ запросов, сопоставление экземпляров в нескольких выборках и вычисление форматированных значений из необработанных данных счетчика. Реализация PDH использует API-интерфейсы реестра при использовании данных от поставщика версии 1 и использует API-интерфейсы потребителей версии 2 при использовании данных от поставщика версии 2.
Некоторые старые потребители счетчиков производительности используют API-интерфейсы реестра для сбора данных о производительности из специального раздела реестра HKEY_PERFORMANCE_DATA
. Это не рекомендуется для нового кода, поскольку обработка данных из реестра сложна и подвержена ошибкам. Реализация API реестра напрямую поддерживает сбор данных от поставщиков версии 1. Он косвенно поддерживает сбор данных от поставщиков версии 2 через уровень перевода, который использует потребительские API версии 2.
Некоторые потребители счетчиков производительности используют функции получателя PerfLib V2 для прямого доступа к данным от поставщиков V2. Это сложнее, чем использование данных с помощью API-интерфейсов PDH, но этот подход может быть полезен, если API-интерфейсы PDH нельзя использовать из-за проблем с производительностью или зависимостями. Реализация PerfLib V2 напрямую поддерживает сбор данных от поставщиков V2. Он не поддерживает сбор данных от поставщиков версии 1.
Примечание
Windows OneCore не включает PDH.dll и не поддерживает использование данных счетчиков производительности через API-интерфейсы реестра. Потребители, работающие на OneCore, должны использовать функции потребителя PerfLib V2.
Поставщики версии 1 реализованы в виде библиотеки DLL поставщика, которая загружается в процесс-потребитель. Реализация API реестра управляет загрузкой библиотеки DLL поставщика, обращением к библиотеке DLL для сбора данных о производительности и соответствующей выгрузкой библиотеки DLL. Библиотека DLL поставщика отвечает за сбор данных о производительности по мере необходимости, например. с помощью обычных API-интерфейсов Windows, RPC, именованных каналов, общей памяти или других механизмов межпроцессного взаимодействия.
Провайдеры версии 2 реализуются либо как программа пользовательского режима (часто служба Windows), либо как драйвер режима ядра. Обычно код поставщика данных о производительности интегрируется непосредственно в существующий компонент (т. е. драйвер или служба сообщает статистику о себе). Реализация PerfLib V2 управляет запросами и ответами через расширение ядра PCW.sys, поэтому провайдеру обычно не нужно реализовывать межпроцессное взаимодействие для предоставления данных о производительности.
Примечание
API и инструменты счетчиков производительности Windows включают ограниченную поддержку доступа к счетчикам производительности с других компьютеров через удаленный реестр (для поставщиков версии 1) и RPC (для поставщиков версии 2). Эту поддержку часто сложно использовать с точки зрения контроля аутентификации (инструменты и API могут аутентифицироваться только как текущий пользователь), а также с точки зрения конфигурации системы (необходимые конечные точки и службы отключены по умолчанию). Во многих случаях лучше получать доступ к счетчикам производительности удаленных систем через WMI, а не через встроенную поддержку удаленного доступа.
Аудитория разработчиков
Счетчики производительности часто используются администраторами для выявления проблем с производительностью или ненормального поведения систем, разработчиками для изучения использования ресурсов программными компонентами и отдельными пользователями для понимания того, как программы ведут себя в их системе. Использование может происходить с помощью инструментов с графическим интерфейсом, таких как диспетчер задач или монитор производительности, инструментов командной строки, таких как typeperf.exe или logman.exe, с помощью сценариев с помощью WMI и PowerShell или с помощью API C/C++ и . NET.
Поставщики счетчиков производительности обычно реализуются как драйверы режима ядра или службы пользовательского режима. Поставщики счетчиков производительности обычно написаны на C или C++.
Требования к среде выполнения
Сведения о требованиях к среде выполнения для определенного элемента программирования см. в разделе «Требования» на справочной странице для этого элемента.
Историю версий см. в разделе Новые возможности.
См. также
Использование счетчиков производительности
Справочник по счетчикам производительности
Как настроить счетчики производительности в мониторе производительности Windows — Business Central
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
- 2 минуты на чтение
В этом разделе описывается, как использовать Windows Performance Monitor для сбора и просмотра данных счетчиков производительности Business Central. Список счетчиков производительности Business Central см. в разделе Счетчики производительности Business Central.
Чтобы настроить счетчики производительности Business Central
Запустите монитор производительности Windows.
- Выберите Start , в поле Search введите perfmon , а затем выберите связанную ссылку.
В области навигации разверните Средства мониторинга и выберите Монитор производительности .
На панели инструментов панели консоли нажмите кнопку Добавить .
В окне Добавить счетчики в раскрывающемся списке Выберите счетчики с компьютера выберите компьютер, на котором работает Business Central Server.