Поделиться через


Практическое руководство. Регистрация и отмена регистрации счетчика производительности

Дата последнего изменения: 3 марта 2011 г.

Применимо к: SharePoint Foundation 2010

В этом разделе описывается регистрация счетчика производительности Windows Server 2008 для отслеживания системой мониторинга производительности и регулирования HTTP-запросов Microsoft SharePoint Foundation, а также удаление счетчика из системы.

Важное примечаниеВажно!

В примере, приведенном в этом разделе, используется консольное приложение. Независимо от типа проекта важно задать правильную целевую версию .NET Framework и процессор. Проект должен быть предназначен для версии Microsoft .NET Framework 3.5 (а не .NET Framework 4). Целевым процессором должен быть Любой процессор или x64. Сведения о том, как выбрать правильное значение, см. в статье Правильное задание конечной среды и процессора. По умолчанию целевой процессор — x86. Чтобы изменить его, щелкните правой кнопкой мыши имя проекта в обозревателе решений, а затем выберите Свойства. Процессор можно изменить на вкладке Построение с помощью раскрывающегося списка Целевая платформа.

Хранение мониторов и калькуляторов показателей исправности

Мониторы производительности в системе регулирования HTTP-запросов создаются во время выполнения как объекты SPSystemPerformanceCounterMonitor системной инфраструктурой. Один такой объект создается для каждого объекта SPPerformanceMonitorCreationData в постоянном свойстве PerformanceMonitors объекта SPHttpThrottleSettings, который сам хранится в свойстве HttpThrottleSettings веб-приложения. Однако в коде не происходит вызов конструктора для класса SPPerformanceMonitorCreationData. Вместо этого в коде вызывается метод SPHttpThrottleSettings.AddPerformanceMonitor(). Этот метод создает объект SPPerformanceMonitorCreationData и добавляет его в коллекцию PerformanceMonitors. Важным свойством класса SPPerformanceMonitorCreationData является AssociatedHealthScoreCalculator. Объект калькулятора показателя исправности также создается методом SPHttpThrottleSettings.AddPerformanceMonitor(). Конструктор для класса SPBucketHealthScoreCalculator вызывается в коде только при создании нового калькулятора для замены существующего калькулятора уже зарегистрированного монитора производительности.

Чтобы создать решение Visual Studio, выполните следующие действия:

  1. Создайте проект консольного приложения в Microsoft Visual Studio, задайте целевую версию .NET Framework и тип процессора.

  2. Добавьте ссылку на библиотеку Microsoft.SharePoint.dll в проект. Она размещена в %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.

  3. Откройте файл program.cs, задайте необходимое пространство имен и имя класса и добавьте инструкции using для пространств имен Microsoft.SharePoint, Microsoft.SharePoint.Administration и Microsoft.SharePoint.Utilities. Программа должна выглядеть следующим образом:

    using System;
    using Microsoft.SharePoint; 
    using Microsoft.SharePoint.Administration;
    using Microsoft.SharePoint.Utilities;
    
    namespace Contoso.SharePoint.Utilities
    {
        class PerformanceCounterRegistrar
        {
            static void Main(string[] args)
            {
    
            }
    // end Main
        }
    }
    

Добавление монитора производительности

  1. В методе Main объявите массив значений Double, которые определяют границы контейнера, который используется калькулятором показателей исправности для присвоения показателей исправности значениям. Контейнеры — это диапазоны возможных значений счетчика. Массив должен удовлетворять следующим требованиям.

    • Значения элементов должны быть упорядочены — либо от наименьшего к наибольшему, либо наоборот.

    • Значения также должны быть упорядочены от значения наибольшей исправности к наименьшей. Таким образом, если buckets — это имя объекта массива, то значение buckets[0] отражает большую исправность, чем buckets[1], которое в свою очередь отражает большую исправность, чем buckets[2] и т. д. Таким образом, значение buckets[buckets.Length-1] всегда должно отражать наименьшую исправность в buckets.

    Из массива из 10 элементов (стандартный размер для массивов, в которых определяются контейнеры производительности) создается 11 контейнеров: значения большей исправности, чем buckets[0], находятся в первом контейнере, а значения меньшей исправности, чем buckets[10], находятся в одиннадцатом контейнере. Калькулятор показателей исправности назначает показатель исправности значению (или результату функции от нескольких значений) в зависимости от контейнера, которому принадлежит значение. Значение типа Int32 будет находиться в диапазоне от 0 до 10. Значения в самом работоспособном контейнере получают показатель 0, а значения в наименее работоспособном контейнере получают показатель 10. В массиве может меньше 10 элементов. Например, предположим, возможные значения некоторого счетчика производительности могут находиться в диапазоне от 0 до 50,0 (низкие значения указывают высокую исправность), и предположим, что числа 10,0, 20,0, 30,0 и 40,0 используются в качестве границ контейнеров. В этом случае объект стандартного класса калькулятора показателей исправности, SPBucketHealthScoreCalculator, будет создавать показатели исправности в соответствии со следующими правилами.

    • 0 для значений производительности меньших 10

    • 3 для значений от 10,0 до 20,0

    • 5 для значений от 20,0 до 30,0

    • 8 для значений от 30,0 до 40,0

    • 10 для значений выше 40,0

    При создании массива контейнеров важно иметь в виду, что система регулирования запросов переходит в режим регулирования, только если по крайней мере один отслеживаемый счетчик имеет показатель 10 (на основании средневзвешенного значения нескольких показаний счетчика). Таким образом, для массива из 10 или меньшего числа элементов выбор значения для последнего элемента крайне важен. Это должно быть значение, указывающее исправность, достаточно низкую, чтобы оправдать блокирование некоторых HTTP-запросов. Так же для массива из 20 элементов значения, отражающие меньшую исправность, чем предпоследний элемент, будут получать показатель 10.

    ПримечаниеПримечание

    В массиве может быть только один элемент, в этом случае значения меньшей исправности, чем значение данного элемента получают показатель 10, а все остальные получают показатель исправности 0. Поскольку никакое значение меньше 10 не запускает регулирование запросов, зачем создавать массив, в котором больше одного элемента? Другими словами, почему нельзя создать бинарную систему показателей исправности:"работоспособный" и "неработоспособный"? Этого нельзя сделать, поскольку показатель исправности для счетчика с наименьшей исправностью добавляется к заголовку объекта HTTP-ответа, даже если он меньше 10, и таким образом регулирование запросов не включается.. Если этот показатель будет принимать более двух значений, клиенты смогут использовать такое предоставленные значения для оценки динамики исправности фермы. Клиентские приложения также могут использовать показатель исправности для улучшения синхронизации с сервером. Например, в клиентском приложении может указываться более длительный интервал синхронизации для более высоких (то есть с меньшей исправностью) показателей исправности. (Это применяется в некоторых приложениях Microsoft Office.) С другой стороны нет особого смысла иметь массив значений из более 10 элементов, поскольку существует всего одиннадцать возможных показателей, поэтому при наличии более 11 контейнеров значения в двух или большем числе последовательных контейнеров будут получать одинаковый показатель исправности. Однако, как указано выше, в массиве может быть меньше 10 элементов, что может быть удобным для некоторых типов счетчиков производительности.

    В следующем примере кода показано объявление массива для создания контейнеров для счетчика Windows Server 2008 с именем "Processor\% Processor Time\_Total". Этот счетчик используется для регистрации процента времени работы процессоров на сервере, которое тратится на процессы, отличные от System Idle. Дополнительные сведения об этом счетчике см. в статье, посвященной объекту процесса (Возможно, на английском языке).

    double[] busyProcessorBuckets = new double[10] {20.0, 28.8, 37.6, 46.4, 55.2, 64.0, 72.8, 81.6, 90.4, 99.2}; 
    

    В этом примере разница между любыми двумя значениями одинакова. Возможно, ситуация будет другой. Для некоторых типов счетчиков может потребоваться использовать значения, увеличивающиеся экспоненциально. Обратите внимание также, что в этом примере значения возрастают. Однако для некоторых типов счетчиков производительности большие значения отражают большую исправность. Поскольку массив контейнеров должен быть упорядочен от значений наибольшей исправности к значениям наименьшей исправности, для такого счетчика значения в контейнерах должны располагаться в порядке убывания.

  2. В методе Main получите ссылку на веб-приложение и затем получите ссылку на параметры регулирования, вызвав метод GetHttpThrottleSettings(SPPersistedObject). В следующем примере показано, как это сделать.

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
  3. В методе Main вызовите метод SPHttpThrottleSettings.AddPerformanceMonitor(), передав ему имя счетчика, его категорию, экземпляр и массив контейнеров в качестве параметров. Передайте true или false в качестве последнего параметра в зависимости того, является ли массив возрастающим или убывающим, соответственно. Следующий код включается в текущий пример.

    throttleSettings.AddPerformanceMonitor("Processor",
                                           "% Processor Time",
                                           "_Total",
                                           busyProcessorBuckets,
                                           true);
    
    СоветСовет

    В методе SPHttpThrottleSettings.AddPerformanceMonitor() не проверяется наличие монитора производительности, отслеживающего тот же экземпляр того же счетчика. Успешные вызовы метода с такими же параметрами приводят к регистрации избыточных объектов счетчика производительности.

Чтобы проверить, зарегистрирован ли счетчик производительности, выполните следующие действия:

  • С помощью командлета Get-SPWebApplicationHttpThrottlingMonitor в SharePoint получите список зарегистрированных мониторов производительности для веб-приложения. Ниже показан синтаксис вызова командлета:

    Get-SPWebApplicationHttpThrottlingMonitor –identity http://<Web application URL>
    

    Вывод для только что зарегистрированного монитора производительности выглядит примерно следующим образом:

    Category                        : Processor
    Counter                         : % Processor Time
    Instance                        : _Total
    AssociatedHealthScoreCalculator : [20.0,28.8,37.6,46.4,55.2,64.0,72.8,81.6,90.4,99.2]
    

Отмена регистрации счетчика производительности

  • Отмена регистрации монитора производительности похожа на регистрацию за исключением того, что в коде вызывается метод RemovePerformanceMonitor(). Одна перегрузка этого метода отменяет регистрацию всех счетчиков производительности с определенной категорией, счетчиком и именем экземпляра. Вторая перегрузка отменяет регистрацию всех счетчиков с указанной категорией и именем счетчика, поэтому если разные мониторы отслеживают разные экземпляры конкретного счетчика, их все можно удалить в одном вызове. Ниже показано использование метода RemovePerformanceMonitor() для удаления монитора в текущем примере:

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
    // Remove the monitor. 
    throttleSettings.RemovePerformanceMonitor("Processor",
                                              "% Processor Time",
                                              "_Total");
    

См. также

Концепции

Регулирование запросов