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


Создание, замена и изменение калькуляторов показателей работоспособности в виде контейнеров

Дата последнего изменения: 17 сентября 2010 г.

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

В этом разделе описывается создание, замена и изменение калькуляторов показателей исправности в виде контейнеров, связанных с мониторами производительности в Microsoft SharePoint Foundation.

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

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

Запуск решения Visual Studio

  1. Создайте проект консольного приложения в 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 HealthCalculatorsUtility
        {
            static void Main(string[] args)
            {
    
            }// end Main
        }
    }
    
  4. Продолжите, следуя одной из процедур, представленных далее.

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

Если нужно заменить калькулятор показателей исправности, связанный с монитором, на новый с другими границами контейнера, в котором также может быть изменен порядок значений контейнера с возрастающего на убывающий или наоборот, используйте следующую процедуру.

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

  1. В методе Main объявите массив значений Double, определяющих границы контейнеров, которые используются новым калькулятором показателей исправности для назначения показателей исправности значениям. Контейнеры — это диапазоны возможных значений счетчика. К объявлению этого массива применяются некоторые ограничения. Дополнительные сведения об этих ограничениях см. в описании процедуры "Добавление монитора производительности" в разделе Практическое руководство. Регистрация и отмена регистрации счетчика производительности. В следующем примере кода показано объявление массива для создания контейнеров для счетчика Windows Server 2008 с именем "Processor\% Processor Time". Этот счетчик используется для регистрации процента времени работы процессоров на сервере, которое тратится на процессы, отличные от "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. Вызовите конструктор SPBucketHealthScoreCalculator и передайте объект массива контейнеров как параметр. Передайте значение true или false в качестве второго параметра в зависимости от того, является ли массив возрастающим или убывающим соответственно. Следующий код продолжает пример.

    SPBucketHealthScoreCalculator nonIdleTimeHealthCalculator = new SPBucketHealthScoreCalculator(busyProcessorBuckets, true);
    
  3. В методе Main получите ссылку на веб-приложение и затем получите ссылку на параметры регулировки, вызвав метод GetHttpThrottleSettings(SPPersistedObject). В следующем примере показано, как это сделать.

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
  4. Внутри метода Main получите ссылку на сохраненную коллекцию объектов SPPerformanceMonitorCreationData. (Фактические объекты монитора производительности [SPSystemPerformanceCounterMonitor] создаются во время выполнения из этих объектов).

    SPHttpThrottlingMonitors myMonitors = throttleSettings.PerformanceMonitors;
    
  5. Также в методе Main получите ссылку на конкретный экземпляр монитора производительности, калькулятор которого нужно заменить, и назначьте новый калькулятор в свойстве AssociatedHealthScoreCalculator. В некоторых случаях индекс монитора в коллекции известен во время разработки. Но чаще код определяет его по категории, счетчику и имени экземпляра, как в следующем примере. Обратите внимание, что Update() вызывается для сохранения изменений в базе данных конфигурации.

    foreach (SPPerformanceMonitorCreationData creationData in myMonitors)
    {
        if (creationData.Category.Equals("Processor", StringComparison.OrdinalIgnoreCase)
            & creationData.Counter.Equals("% Processor Time", StringComparison.OrdinalIgnoreCase) 
            & creationData.Instance.Equals("0", StringComparison.OrdinalIgnoreCase))
        {
            creationData.AssociatedHealthScoreCalculator = nonIdleTimeHealthCalculator;
            throttleSettings.Update();
            break;
        }
    }
    

Изменение границ контейнера

Не нужно заменять весь калькулятор исправности, связанный с монитором, если требуется изменить только границы контейнера. Если новые границы совпадают с возрастающим или убывающим порядком существующих границ, для изменения границ можно использовать метод SetScoreBuckets([]).

Изменение границ контейнера

  1. В методе Main объявите массив значений Double, которые определяют новые границы контейнеров. Контейнеры — это диапазоны возможных значений счетчика. К объявлению этого массива применяются некоторые ограничения. Дополнительные сведения об этих ограничениях см. в описании процедуры "Добавление монитора производительности" в разделе Практическое руководство. Регистрация и отмена регистрации счетчика производительности. В следующем примере кода показано объявление массива для создания контейнеров для счетчика Windows Server 2008 с именем "Processor\% Processor Time". Но в отличие от контейнеров, описанных в подразделе Замена калькулятора показателей исправности выше, в этом массиве определяется набор экспоненциально возрастающих значений.

    double[] busyProcessorBuckets = new double[5] {5.0, 10.0, 20.0, 40.0, 80.0}; 
    
  2. Вместо создания нового объекта калькулятора получите ссылку на существующий калькулятор, который можно изменить и преобразовать в класс, представляющий калькуляторы в виде контейнеров. Действия аналогичны процедуре, описанной в разделе Замена калькулятора показателей исправности выше. Следующий код показывает результат выполнения этих действий:

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
    SPHttpThrottlingMonitors myMonitors = throttleSettings.PerformanceMonitors;
    
    foreach (SPPerformanceMonitorCreationData creationData in myMonitors)
    {
        if (creationData.Category.Equals("Processor", StringComparison.OrdinalIgnoreCase)
            & creationData.Counter.Equals("% Processor Time", StringComparison.OrdinalIgnoreCase) 
            & creationData.Instance.Equals("0", StringComparison.OrdinalIgnoreCase))
        {
            SPBucketHealthScoreCalculator bucketScoreCalculator = 
              (SPBucketHealthScoreCalculator)creationData.AssociatedHealthScoreCalculator;
    
        }
    }
    
  3. Также в структуре if вызовите метод SetScoreBuckets([]) объекта создания данных монитора и передайте новый массив контейнеров. Не забудьте вызвать метод Update(), чтобы сохранить изменения.

    bucketScoreCalculator.SetScoreBuckets(busyProcessorBuckets);
    throttleSettings.Update();
    break;
    

См. также

Концепции

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