次の方法で共有


バケット スタイルの正常性スコア計算機能を作成、置換、および変更する

最終更新日: 2010年9月17日

適用対象: SharePoint Foundation 2010

このトピックでは、Microsoft SharePoint Foundation のパフォーマンス モニターに関連付けられているバケット スタイルの正常性スコア計算機能を作成、置換、および変更する方法を説明します。

重要重要

このトピックの例では、コンソール アプリケーションを使用しています。プロジェクトの種類にかかわらず、正しいターゲットの .NET Framework と CPU を設定することが非常に重要です。このプロジェクトでは、ターゲット .NET Framework は Microsoft .NET Framework 3.5 である必要があります (Microsoft .NET Framework 4 ではありません)。ターゲット CPU は [Any CPU] または [x64] である必要があります。この選択については、「[方法] 適切なターゲット フレームワークおよび CPU を設定する」を参照してください。通常、ターゲット CPU は既定で [x64] になります。これを変更するには、[ソリューション エクスプローラー] でプロジェクト名を右クリックし、[プロパティ] を選択します。[ビルド] タブで [プラットフォーム ターゲット] ドロップダウン リストを使って CPU を変更できます。

Visual Studio ソリューションを開始するには

  1. Visual Studio でコンソール アプリケーション プロジェクトを作成し、ターゲットの .NET Framework と CPU プラットフォームを設定します。

  2. Microsoft.SharePoint.dll への参照をプロジェクトに追加します。これは %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI にあります。

  3. program.cs ファイルを開き、適切な名前空間とクラス名を設定し、Microsoft.SharePoint、Microsoft.SharePoint.Administration、Microsoft.SharePoint.Utilities の各名前空間について using ステートメントを追加します。これでコードは次のようになります。

    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 つを実行します。

正常性スコア計算機能を置き換える

モニターに関連付けられている正常性スコア計算機能を、異なるバケット境界を持つ新しい正常性スコア計算機能に置き換え、さらに必要に応じてバケット値の順序を昇順から降順に (またはその逆に) 変更する場合は、次の手順を使用します。

モニターに関連付けられている正常性スコア計算機能を置き換えるには

  1. Main メソッド内で、代替正常性スコア計算機能によって値への正常性スコアの割り当てに使用されるバケットの境界を定義する Double 値の配列を宣言します。バケットは、可能性のあるカウンター値の部分範囲です。この配列の宣言方法には制限があります。これらの制限の詳細については、「[方法] パフォーマンス カウンターの登録と登録解除」のパフォーマンス モニターを追加する手順を参照してください。次のコードは、"Processor\% Processor Time" というWindows Server 2008 カウンター用のバケットを作成するための配列の宣言を示しています。このカウンターは、サーバーのプロセッサが System Idle プロセス以外のプロセスに費やしている時間の割合を報告します。このカウンターの詳細については、「Processor Object (英語)」を参照してください。

    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 コンストラクターを呼び出し、パラメーターとしてバケット配列オブジェクトを渡します。配列が昇順であるか降順であるかに応じて、2 番目のパラメーターとして、それぞれ true または false を渡します。次のコードはこの例の続きです。

    SPBucketHealthScoreCalculator nonIdleTimeHealthCalculator = new SPBucketHealthScoreCalculator(busyProcessorBuckets, true);
    
  3. Main メソッド内で、Web アプリケーションへの参照を取得し、次に 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 値の配列を宣言します。バケットは、可能性のあるカウンター値の部分範囲です。この配列の宣言方法には制限があります。これらの制限の詳細については、「[方法] パフォーマンス カウンターの登録と登録解除」のパフォーマンス モニターを追加する手順を参照してください。次のコードは、"Processor\% Processor Time" という Windows Server 2008 カウンター用のバケットを作成するための配列の宣言を示しています。ただし、このトピックの「正常性スコア計算機能を置き換える」セクションで定義したバケットとは異なり、この配列では急激に増加していく値のセットを定義しています。

    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;
    

関連項目

概念

要求の調整