Создание, замена и изменение калькуляторов показателей работоспособности в виде контейнеров
Дата последнего изменения: 17 сентября 2010 г.
Применимо к: SharePoint Foundation 2010
В этом разделе описывается создание, замена и изменение калькуляторов показателей исправности в виде контейнеров, связанных с мониторами производительности в Microsoft SharePoint Foundation.
![]() |
---|
В примере, приведенном в этом разделе, используется консольное приложение. Независимо от типа проекта важно задать правильную целевую версию .NET Framework и процессор. Проект должен быть предназначен для версии Microsoft .NET Framework 3.5 (а не Microsoft .NET Framework 4). Целевым процессором должен быть Любой процессор или x64. Дополнительные сведения о выборе см. в статье Правильное задание конечной среды и процессора. По умолчанию целевой процессор — x86. Чтобы изменить его, щелкните правой кнопкой имя проекта в обозревателе решений, а затем выберите Свойства. Можно изменить процессор на вкладке Сборка с помощью раскрывающегося списка Целевая платформа. |
Запуск решения Visual Studio
Создайте проект консольного приложения в Visual Studio, задайте целевую версию .NET Framework и тип процессора.
Добавьте ссылку на библиотеку Microsoft.SharePoint.dll в проект. Она размещена в %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.
Откройте файл 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 } }
Продолжите, следуя одной из процедур, представленных далее.
Замена калькулятора показателей исправности
Если нужно заменить калькулятор показателей исправности, связанный с монитором, на новый с другими границами контейнера, в котором также может быть изменен порядок значений контейнера с возрастающего на убывающий или наоборот, используйте следующую процедуру.
Замена калькулятора показателей исправности, связанного с монитором
В методе 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};
Вызовите конструктор SPBucketHealthScoreCalculator и передайте объект массива контейнеров как параметр. Передайте значение true или false в качестве второго параметра в зависимости от того, является ли массив возрастающим или убывающим соответственно. Следующий код продолжает пример.
SPBucketHealthScoreCalculator nonIdleTimeHealthCalculator = new SPBucketHealthScoreCalculator(busyProcessorBuckets, true);
В методе Main получите ссылку на веб-приложение и затем получите ссылку на параметры регулировки, вызвав метод GetHttpThrottleSettings(SPPersistedObject). В следующем примере показано, как это сделать.
Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
Внутри метода Main получите ссылку на сохраненную коллекцию объектов SPPerformanceMonitorCreationData. (Фактические объекты монитора производительности [SPSystemPerformanceCounterMonitor] создаются во время выполнения из этих объектов).
SPHttpThrottlingMonitors myMonitors = throttleSettings.PerformanceMonitors;
Также в методе 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([]).
Изменение границ контейнера
В методе Main объявите массив значений Double, которые определяют новые границы контейнеров. Контейнеры — это диапазоны возможных значений счетчика. К объявлению этого массива применяются некоторые ограничения. Дополнительные сведения об этих ограничениях см. в описании процедуры "Добавление монитора производительности" в разделе Практическое руководство. Регистрация и отмена регистрации счетчика производительности. В следующем примере кода показано объявление массива для создания контейнеров для счетчика Windows Server 2008 с именем "Processor\% Processor Time". Но в отличие от контейнеров, описанных в подразделе Замена калькулятора показателей исправности выше, в этом массиве определяется набор экспоненциально возрастающих значений.
double[] busyProcessorBuckets = new double[5] {5.0, 10.0, 20.0, 40.0, 80.0};
Вместо создания нового объекта калькулятора получите ссылку на существующий калькулятор, который можно изменить и преобразовать в класс, представляющий калькуляторы в виде контейнеров. Действия аналогичны процедуре, описанной в разделе Замена калькулятора показателей исправности выше. Следующий код показывает результат выполнения этих действий:
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; } }
Также в структуре if вызовите метод SetScoreBuckets([]) объекта создания данных монитора и передайте новый массив контейнеров. Не забудьте вызвать метод Update(), чтобы сохранить изменения.
bucketScoreCalculator.SetScoreBuckets(busyProcessorBuckets); throttleSettings.Update(); break;