Freigeben über


Gewusst wie: Registrieren und Aufheben der Registrierung eines Leistungsindikators

Letzte Änderung: Donnerstag, 3. März 2011

Gilt für: SharePoint Foundation 2010

In diesem Thema wird erklärt, wie ein Windows Server 2008-Leistungsindikator für die Überwachung durch das Leistungsüberwachungssystem und das System zur HTTP-Anforderungssteuerung von Microsoft SharePoint Foundation registriert wird und wie ein Indikator vom System entfernt wird.

Wichtiger HinweisWichtig

Im ausgeführten Beispiel in diesem Thema wird eine Konsolenanwendung verwendet. Ungeachtet des Projekttyps ist es wichtig, dass Sie die richtige .NET Framework-Zielversion und die richtige Ziel-CPU festlegen. Das Ziel des Projekts muss Microsoft .NET Framework 3.5 sein (nicht .NET Framework 4). Die Ziel-CPU muss Any CPU oder x64 entsprechen. Weitere Informationen zur Auswahl finden Sie unter Gewusst wie: Festlegen des richtigen Zielframeworks und der CPU. Die Ziel-CPU ist normalerweise standardmäßig auf x86 festgelegt. Zum Ändern dieser Einstellung klicken Sie mit der rechten Maustaste auf den Projektnamen im Projektmappen-Explorer und wählen Eigenschaften aus. Sie können die CPU auf der Registerkarte Erstellen mithilfe der Dropdownliste Zielplattform ändern.

Persistenz der Monitore und Berechnungsmodule für die Integritätsbewertung

Systemmonitore im System zur HTTP-Anforderungssteuerung werden von der Systeminfrastruktur zur Laufzeit als SPSystemPerformanceCounterMonitor-Objekte erstellt. Für jedes SPPerformanceMonitorCreationData-Objekt in der persistierten PerformanceMonitors-Eigenschaft des SPHttpThrottleSettings-Objekts, das wiederum selbst in der HttpThrottleSettings-Eigenschaft der Webanwendung persistiert wird, wird ein solches Objekt erstellt. Allerdings ruft der Code keinen Konstruktor für die SPPerformanceMonitorCreationData-Klasse auf. Stattdessen wird die SPHttpThrottleSettings.AddPerformanceMonitor()-Methode aufgerufen. Diese Methode konstruiert das SPPerformanceMonitorCreationData-Objekt und fügt es der PerformanceMonitors-Sammlung hinzu. Eine wichtige Eigenschaft der SPPerformanceMonitorCreationData-Klasse ist AssociatedHealthScoreCalculator. Das Objekt für das Berechnungsmodul für die Integritätsbewertung wird ebenfalls durch die SPHttpThrottleSettings.AddPerformanceMonitor()-Methode erstellt. Der Konstruktor für SPBucketHealthScoreCalculator wird nur ein einziges Mal aufgerufen, und zwar, wenn Sie ein neues Berechnungsmodul erstellen, um es gegen das vorhandene Berechnungsmodul eines bereits registrierten Systemmonitors auszutauschen.

So erstellen Sie die Visual Studio-Lösung

  1. Erstellen Sie in Microsoft Visual Studio ein Konsolenanwendungsprojekt, und legen Sie die .NET Framework-Zielversion und die CPU-Zielplattform fest.

  2. Fügen Sie Microsoft.SharePoint.dll einen Verweis auf das Projekt hinzu. Diese Datei befindet sich in %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.

  3. Öffnen Sie die Datei program.cs, und legen Sie einen entsprechenden Namespace und einen Klassennamen fest. Fügen Sie dann using-Anweisungen für die Namespaces Microsoft.SharePoint, Microsoft.SharePoint.Administration und Microsoft.SharePoint.Utilities hinzu. Der Code sollte jetzt ungefähr so aussehen:

    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
        }
    }
    

So fügen Sie einen Systemmonitor hinzu

  1. Deklarieren Sie in der Main-Methode ein Array aus Double-Werten, durch die die Grenzen der Buckets definiert werden, die vom Berechnungsmodul für die Integritätsbewertung zum Zuweisen von Integritätsbewertungen zu den Werten verwendet werden. Buckets sind Teilbereiche möglicher Indikatorwerte. Das Array muss die folgenden Bedingungen erfüllen:

    • Die Werte der Elemente müssen in der richtigen Reihenfolge angeordnet werden, entweder von klein nach groß oder von groß nach klein.

    • Außerdem müssen die Werte von höchster Integrität zu niedrigster Integrität angeordnet werden. Wenn also buckets der Name des Arrayobjekts ist, ist buckets[0] ein Wert mit höherer Integrität als buckets[1], und buckets[1] weist wiederum eine höhere Integrität auf als buckets[2] usw. buckets[buckets.Length-1] muss daher stets der Wert mit der niedrigsten Integrität in buckets sein.

    Ein Array mit 10 Elementen, der Standardgröße für Leistungsbucketarrays, erzeugt 11 Buckets: Werte mit einer höheren Integrität als buckets[0] befinden sich im ersten Bucket, während sich Werte mit einer niedrigeren Integrität als buckets[10] im 11. Bucket befinden. Das Berechnungsmodul für die Integritätsbewertung weist einem Wert eine Integritätsbewertung zu (oder das Ergebnis einer Funktion mit mehreren Werten), die davon abhängig ist, welchem Bucket der Wert angehört. Die Bewertung ist ein Int32-Wert zwischen 0 und 10. Werte im Bucket mit höchster Integrität erhalten die Bewertung 0, Werte im Bucket mit der niedrigsten Integrität die Bewertung 10. Das Array kann auch weniger als 10 Elemente enthalten. Ein Beispiel: Angenommen, die möglichen Werte eines hypothetischen Leistungsindikators liegen zwischen 0 und 50,0 (wobei niedrigere Werte eine höhere Integrität bedeuten) und die Zahlen 10,0, 20,0, 30,0 und 40,0 definieren die Grenzen zwischen den Buckets. In diesem Szenario würde ein Objekt der Standardklasse für das Berechnungsmodul für die Integritätsbewertung, SPBucketHealthScoreCalculator, Integritätsbewertungen nach folgenden Regeln generieren:

    • 0 für Leistungswerte unter 10

    • 3 für Werte zwischen 10,0 und 20,0

    • 5 für Werte zwischen 20,0 und 30,0

    • 8 für Werte zwischen 30,0 und 40,0

    • 10 für Werte über 40,0

    Denken Sie beim Aufbau Ihres Bucketarrays daran, dass das System zur Anforderungssteuerung nur dann in den Einschränkungsmodus wechselt, wenn mindestens ein überwachter Indikator eine Bewertung von 10 aufweist (basierend auf dem gewichteten Durchschnitt mehrerer Stichproben des Indikators). Bei einem Array mit 10 oder weniger Elementen ist die Wahl eines geeigneten Werts für das letzte Element im Array also äußerst wichtig. Dieser Wert sollte einen Integritätszustand kennzeichnen, der niedrig genug ist, um die Blockierung einiger HTTP-Anforderungen zu rechtfertigen. Ähnlich verhält es sich bei einem Array mit 20 Elementen: Werte mit einer niedrigeren Integrität als das vorletzte Element erhalten hier die Bewertung 10.

    HinweisHinweis

    Das Array könnte auch nur ein Element enthalten. In diesem Fall würden Werte mit einer niedrigeren Integrität als der Wert des einzelnen Elements eine Integritätsbewertung von 10 erhalten, alle anderen die Integritätsbewertung 0. Wenn aber kein Wert unter 10 den Einschränkungsmodus auslöst, welchen Sinn hat es dann, mehrere Elemente im Array zu haben? Warum wird stattdessen kein binäres System mit den Integritätsbewertungen "fehlerfrei" und "fehlerhaft" verwendet? Die Antwort ist, dass die Integritätsbewertung des Indikators mit der niedrigsten Integrität dem Header des HTTP-Antwortobjekts hinzugefügt wird, und zwar auch dann, wenn sie kleiner ist als 10 und daher keine Einschränkung erfolgt. Anhand der Variationen dieses Werts über einen größeren Wertebereich als nur zwei Werte können Clients Trends bei der Farmintegrität feststellen. Clientanwendungen können die Integritätsbewertung auch zur Verbesserung der Synchronisierung mit dem Server verwenden. Beispielsweise könnte eine Clientanwendung ein längeres Synchronisierungsintervall für höhere Integritätsbewertungen (also Elemente mit niedrigerer Integrität) festlegen. (Bei einigen Microsoft Office-Anwendungen ist dies der Fall.) Andererseits ist es wenig sinnvoll, ein Array mit mehr als 10 Elementen zu verwenden, da es nur 11 mögliche Integritätsbewertungen gibt. Bei mehr als 11 Buckets gäbe es infolgedessen Werte in zwei oder mehr aufeinanderfolgenden Buckets, die dieselbe Integritätsbewertung erhalten würden. Wie bereits erwähnt, ist es jedoch möglich, weniger als 10 Elemente zu verwenden, was für bestimmte Leistungsindikatortypen durchaus sinnvoll erscheint.

    Im folgenden Code wird eine Deklaration eines Arrays gezeigt, das zum Erstellen von Buckets für den Windows Server 2008-Indikator Prozessor\Prozessorzeit (%)\_Gesamt gedacht ist. Dieser Indikator meldet die Zeit in Prozent, die die Prozessoren des Servers für andere Prozesse als den Leerlaufprozess aufwenden. Weitere Informationen zu diesem Indikator finden Sie unter Prozessorobjekt.

    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}; 
    

    In diesem Beispiel bleibt die Differenz zwischen zwei Werten stets gleich. Das muss nicht so sein. Bei einigen Indikatortypen kann es sinnvoll sein, Werte zu verwenden, die exponentiell zunehmen. Beachten Sie außerdem, dass die Werte in diesem Beispiel in aufsteigender Reihenfolge angeordnet sind. Bei einigen Leistungsindikatortypen bedeuten allerdings höhere Werte eine höhere Integrität als niedrigere Werte. Da das Bucketarray von der höchsten zur niedrigsten Integrität angeordnet werden muss, müssen die Werte in einem Bucketarray für einen derartigen Indikator in absteigender Reihenfolge angeordnet werden.

  2. Rufen Sie in der Main-Methode einen Verweis auf die Webanwendung ab, und rufen Sie dann einen Verweis auf die Drosselungseinstellungen ab, indem Sie die GetHttpThrottleSettings(SPPersistedObject)-Methode aufrufen. Dies wird im folgenden Beispiel gezeigt.

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
  3. Rufen Sie in der Main-Methode die SPHttpThrottleSettings.AddPerformanceMonitor()-Methode auf, und übergeben Sie ihr als Parameter den Namen des Indikators, seine Kategorie und Instanz sowie das Bucketarray. Übergeben Sie true oder false als letzten Parameter, je nachdem, ob es sich um ein aufsteigendes oder ein absteigendes Array handelt. Mit dem folgenden Code wird das Beispiel fortgesetzt.

    throttleSettings.AddPerformanceMonitor("Processor",
                                           "% Processor Time",
                                           "_Total",
                                           busyProcessorBuckets,
                                           true);
    
    TippTipp

    Die SPHttpThrottleSettings.AddPerformanceMonitor()-Methode überprüft nicht, ob bereits ein Systemmonitor für dieselbe Instanz desselben Indikators vorhanden ist. Durch mehrere Aufrufe der Methode mit denselben Parametern werden daher redundante Leistungsindikatorobjekte registriert.

So überprüfen Sie, ob der Leistungsindikator registriert ist

  • Rufen Sie mit dem SharePoint-Verwaltungsshell-Cmdlet Get-SPWebApplicationHttpThrottlingMonitor eine Liste der registrierten Leistungsindikatoren für die Webanwendung ab. Nachfolgend ist die Syntax des Cmdlet-Aufrufs dargestellt.

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

    Die Ausgabe für den soeben registrierten Systemmonitor sieht folgendermaßen aus:

    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]
    

So heben Sie die Registrierung eines Leistungsindikators auf

  • Das Aufheben der Registrierung eines Systemmonitors läuft ähnlich ab wie die Registrierung, außer dass mit dem Code RemovePerformanceMonitor() aufgerufen wird. Eine Überladung dieser Methode hebt die Registrierung aller Leistungsindikatoren mit einem bestimmten Kategorie-, Indikator- und Instanznamen auf. Eine zweite Überladung hebt die Registrierung aller Indikatoren mit einem angegebenen Kategorie- und Indikatornamen auf. Wenn also unterschiedliche Monitore verschiedene Instanzen eines bestimmten Indikators überwachen, können sie alle mit einem einzigen Aufruf entfernt werden. Im folgenden Beispiel wird dargestellt, wie mithilfe der RemovePerformanceMonitor()-Methode der Monitor im ausgeführten Beispiel entfernt wird.

    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");
    

Siehe auch

Konzepte

Anforderungsdrosselung