Практическое руководство. Программное чтение отслеживаемых значений
Дата последнего изменения: 3 марта 2011 г.
Применимо к: SharePoint Foundation 2010
В этом разделе описывается, как в коде можно организовать чтение значений счетчиков производительности Windows Server 2008, которые отслеживаются системой мониторинга производительности и регулирования запросов Microsoft SharePoint Foundation.
Важно! |
---|
В примере, приведенном в этом разделе, используется консольное приложение. Независимо от типа проекта важно задать правильную версию .NET Framework и процессор. Проект должен быть предназначен для версии Microsoft .NET Framework 3.5 (а не Microsoft .NET Framework 4). Целевым процессором должен быть Любой процессор или x64. Сведения о том, как выбрать правильное значение, см. в разделе Правильное задание конечной среды и процессора. По умолчанию обычно используется процессор x86. Чтобы изменить его, щелкните имя проекта в обозревателе решений правой кнопкой мыши и выберите пункт Свойства. Можно изменить процессор на вкладке Построение с помощью раскрывающегося списка Целевая платформа. |
Чтение счетчиков производительности программным способом
В приведенной ниже процедуре показано использование API-интерфейсов системы мониторинга производительности SharePoint Foundation для считывания значения счетчика производительности. Существует множество нюансов в работе базовой системы счетчиков производительности в ОС. Например, некоторые счетчики дают точное значение только при повторном чтении из пользовательского кода. Рекомендуется изучить указанные ниже разделы и описания конкретных счетчиков, значения которых считываются из кода. Многие из перечисленных ниже разделов посвящены управляемым и неуправляемым API-интерфейсам и не относятся к предмету напрямую, но позволят углубить свои знания о базовой системе.
Счетчики производительности Windows (Возможно, на английском языке) и разделы в этом узле.
Справочник по счетчикам производительности Windows Server 2003 (Возможно, на английском языке)
Знакомство с отслеживанием порогов производительности (Возможно, на английском языке) и разделы в этом узле.
PerformanceCounter
Сбор данных о производительности (Возможно, на английском языке)
Отображение данных о производительности (Возможно, на английском языке)
Также рекомендуется выполнить поиск в базе знаний, блогах и форумах по каждому показателю, значения которого считываются в коде.
Примечание |
---|
.NET Framework предоставляет API-интерфейсы для чтения значений счетчиков производительности Windows Server 2008, однако в этом разделе предполагается, что разработчик уверен в использовании показателей, зарегистрированных для мониторинга в системе мониторинга производительности и регулирования запросов Microsoft SharePoint Foundation. |
Чтение значения счетчика производительности
Создайте в Microsoft Visual Studio проект консольного приложения, задайте целевую версию .NET Framework и тип процессора.
Добавьте ссылку на библиотеку Microsoft.SharePoint.dll в проект консольного приложения. Она размещена в %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.
Откройте файл program.cs, задайте необходимое пространство имен и имя класса и добавьте операторы using для System.Threading, Microsoft.SharePoint, Microsoft.SharePoint.Administration и Microsoft.SharePoint.Utilities. Код должен выглядеть примерно следующим образом.
using System; using System.Threading; using Microsoft.SharePoint; using Microsoft.SharePoint.Administration; using Microsoft.SharePoint.Utilities; namespace Contoso.SharePoint.Utilities { class PerformanceCounterReader { static void Main(string[] args) { } // end Main } }
В методе Main получите ссылку на веб-приложение, значения мониторов производительности которого будут считываться. В приведенном ниже коде показано, как это сделать.
static void Main(string[] args) { Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); }
Весь оставшийся в этом разделе код добавляется в метод Main.
Получите ссылку на параметры регулирования в веб-приложении и на коллекцию зарегистрированных мониторов.
SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication); SPSystemPerformanceMonitorCollection monitors = throttleSettings.GenerateMonitors();
Получите ссылку на монитор, значение которого необходимо считать. В некоторых случаях уже во время проектирования известно положение монитора в коллекции, тогда к нему можно обращаться с помощью индексатора. Если, например, это последний счетчик, можно использовать следующую строку SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitors[monitors.Count - 1];. (Обратите внимание, что необходимо привести объект монитора к специальному неабстрактному типу монитора, которому он принадлежит.) В других сценариях в коде может потребоваться организовать перебор коллекции в поисках монитора с конкретным набором значений свойств Category, Counter и Instance. В следующем примере в коде будет проведен перебор в цикле всех зарегистрированных мониторов, считано значение их свойства Value и выведены их имена и значения.
foreach (SPSystemPerformanceMonitor monitor in monitors) { SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitor; Console.WriteLine(counterMonitor.Name); // Read and display the counter value. double currentValue = Convert.ToDouble(counterMonitor.Value); Console.WriteLine(currentValue.ToString()); } Console.WriteLine("Press return to end application."); Console.Readline();
Обратите внимание, что для многих типов счетчиков производительности при первом считывании всегда возвращается значение по умолчанию, потому что значение счетчика представляет собой функцию от двух точек исходных данных Чтобы получить действительное значение, нужно через некоторое время выполнить повторное считывание. Например, если отслеживается счетчик "Processor\% Processor Time\_Total", то методу доступа get свойства Value требуется по крайней мере одна секунда, чтобы сформировать действительное значение после первого считывания из вызывающего кода. Чтобы гарантированно получить действительное значения в коде, вызовите метод Sleep(Int32), чтобы подождать по крайней мере одну секунду, и снова считайте значение свойства Value. Это показано в приведенном ниже коде.
foreach (SPSystemPerformanceMonitor monitor in monitors) { SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitor; Console.WriteLine(counterMonitor.Name); // Read the counter value, wait 1.5 seconds, and read again for a valid value. double currentValue = Convert.ToDouble(counterMonitor.Value); Thread.Sleep(1500); currentValue = Convert.ToDouble(counterMonitor.Value); // Write the valid value to the screen. Console.WriteLine(currentValue.ToString()); } Console.WriteLine("Press return to end application."); Console.Readline();
Совет Если после получения действительного значения оно потребуется снова, воспользуйтесь свойством LastValue. При повторном чтении свойства Value выполняется еще одно извлечение значения базового счетчика, которое обычно отличается от нужного.