次の方法で共有


要求の調整

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

この記事の内容
要求の調整の概要
調整制御システムの初期化
要求をブロックするかどうかを確認する
登録済みパフォーマンス カウンター
要求分類子
正常性スコア計算機能

ここでは、フロントエンド Web サーバーがビジー状態ですべての受信要求を処理しきれない場合に、HTTP 要求の処理量を調整する Microsoft SharePoint Foundation システムについて説明します。

要求の調整の概要

SharePoint Foundation には、さまざまな Windows Server 2008 のパフォーマンス カウンターを監視するシステムがあり、監視対象のパフォーマンス カウンターが、すべての受信要求を処理しきれないビジー状態のサーバーがあることを示している場合に、HTTP 要求の処理量を調整 (つまり、ブロック) します。この監視および調整システムは、サーバーの全体管理アプリケーションまたは SharePoint 管理シェルの PowerShell コマンドを使用して、特定の SharePoint Foundation Web アプリケーションに対してオンまたはオフにできます。また、このシステムを変更するには、SharePoint Foundation オブジェクト モデルまたは SharePoint 管理シェルのコマンドレットを使用します。

ヒントヒント

SharePoint Foundation の監視および調整オブジェクト モデルに対してプログラミングを行うには、パフォーマンス カウンターの Windows Server 2008 システムと、カテゴリ (パフォーマンス オブジェクトとも呼ばれます)、カウンター、およびインスタンスの概念について理解しておく必要があります。これらの概念および独自のパフォーマンス カウンター作成の詳細については、以下のトピックを参照してください。

調整制御システムの初期化

調整制御システムは、特定のフロントエンド Web サーバー上の特定のワーカー プロセスに対する最初の HTTP 要求の BeginRequest イベント中に初期化されます。この初回要求時に初期化されたエンティティとスレッドは、そのプロセスに対する以降の要求で再利用されます。Web アプリケーションがリセットされると、リセット後、最初に行われた要求によってシステムが再度初期化されます。以下のサブセクションでは、システムを初期化するための 2 つの主な手順について説明します。

パフォーマンス インスペクターを作成する

各フロントエンド Web サーバーの各 Web アプリケーションのワーカー プロセスごとに、Web アプリケーションの HttpThrottleSettings プロパティの情報で初期化された独自のパフォーマンス インスペクターがあります。インスペクターは、主に以下の 4 つの部分で構成されます。

  • 一連の正常性スコア。監視対象のパフォーマンス カウンターごとに 1 つあります。0 ~ 10 の範囲内の Int32 値で、0 は最も正常な状態を、10 は最も異常な状態を示します。

  • プロセス全体の正常性スコア。このスコアも 0 ~ 10 の範囲内の Int32 値です。

  • 監視対象のカウンターごとに、そのカウンターから読み取られた (サンプリングされた) 一連の未加工パフォーマンス値。古いサンプルから新しいサンプルの順に並んでいます。

  • サーバー状態検査スレッド。カウンター値の定期サンプリングに使用されます。

  • カウンターのサンプリング頻度を決定する更新間隔の設定。既定値は 5 秒です。

サーバー状態検査スレッドを開始する

サーバー状態検査スレッドは、インスペクターが作成されたときに一緒に作成され、インスペクターの更新間隔で指定された間隔で以下の手順をループします。

  1. Web アプリケーションの HttpThrottleSettings プロパティで SPHttpThrottleSettings オブジェクトを取得します (このオブジェクトは、前回のループ以降、変更されている可能性があります。たとえば、更新間隔が変更されていたり、追加のパフォーマンス カウンターが監視対象のカウンター リストに追加されていたりすることがあります)。

  2. 前回のループ以降、要求の調整がオフになっていないことを確認します。

  3. インスペクターの更新間隔を、SPHttpThrottleSettings.RefreshInterval の値に設定します。

  4. GenerateMonitors() メソッドを呼び出します。このメソッドにより、監視する必要がある各パフォーマンス カウンターの SPSystemPerformanceCounterMonitor オブジェクトが作成されます。どのサーバーのカウンターを監視する必要があるかに関する情報は、一連の SPPerformanceMonitorCreationData 永続的オブジェクトによって提供されます。この中の 1 つが、監視する必要があるすべてのカウンターに対して存在します。この各作成データ オブジェクトには、重要な SPHealthScoreCalculator 子オブジェクトが含まれます。このオブジェクトでは、パフォーマンス カウンターの値を 0 ~ 10 の正常性スコアに変換できます (また、このオブジェクトは複数のパフォーマンス値の数学関数の結果を取り、パフォーマンス カウンターの値を正常性スコアに変換できます)。

  5. 各モニターが監視対象のカウンターから最新の値をサンプリングし、対応するカウンターのインスペクターの一連の未加工パフォーマンス値に保存します。

  6. 各モニターが監視対象のカウンターの正常性スコアを更新します。この手順には、以下のサブステップが含まれます。

    1. 古くなりすぎて関係がなくなったサンプル値が、一連の未加工パフォーマンス値から削除されます。保持されるのは、最新の n 個の値のみです (n は、HttpThrottleSettings.NumberOfSamples プロパティの値に置き換えてください)。

    2. 残りの値に数学関数が適用され、重みの平均値が生成されます。値が新しいほど、重みが高くなります。

    3. モニターが正常性スコア計算機能を使用し、重みの平均値に対して正常性スコア (1 ~ 10) を計算します。

  7. ワーカー プロセスの全体的な正常性スコアが、個別のモニターのスコアの中から最も高い (最も異常な状態を示す) スコアに設定されます。

  8. 調整レベルが、次の規則に従うように設定されます。

    • プロセスの全体的な正常性スコアが 10 未満の場合、要求を調整する必要がないので、調整レベルは Normal に設定されます。

    • 全体的な正常性スコアが 10 (最も異常な状態を示す、最高レベルのスコア) で、この状態の持続時間が 60 秒未満の場合、調整レベルは FirstStage に設定されます。これは、あるカテゴリの HTTP 要求がブロックされ、クライアントに HTTP 503 エラー ("サービス使用不可能") が送信されたことを意味します。この調整は、同じワーカー プロセスに割り当てられた要求にのみ影響します。どのカテゴリの要求がブロックされているか、および指定された要求がどのカテゴリに属するかをシステムが判断する方法については、このトピックで後述する「要求をブロックするかどうかを確認する」を参照してください。

    • 全体的な正常性スコアが 10 で、この状態が 60 秒以上継続する場合、調整レベルは、SecondStage に設定されます。これは、要求の追加カテゴリがブロックされていることを意味します。

  9. 検査は、更新間隔の時間だけ待機した後、繰り返されます。

    注意

    調整レベルが FirstStage または SecondStage の場合は、その全体的な正常性スコアが検査スレッドのサイクルで 10 未満に再設定されるまで、ワーカー プロセスに対する調整が続けられます。

要求をブロックするかどうかを確認する

指定した Web アプリケーションに対して監視および調整システムがオンになったら、指定された HTTP 要求がブロックされているかどうかが、要求の PostResolveRequestCache イベント中に確認されます。具体的には、次の手順が実行されます。

  1. HTTP 応答オブジェクトが初期化され、ワーカー プロセスの全体的な正常性スコアが含まれるヘッダーがそのオブジェクトに追加されます。

  2. プロセスの調整レベルが FirstStage または SecondStage のどちらかであるかどうかが確認されます。どちらでもない場合、そのプロセスは調整モードではないので、残りの手順は省略されます。

  3. プロセスが調整モードの場合、要求は Web アプリケーションの調整分類子ごとにテストされます。調整分類子は HttpThrottleSettings.ThrottleClassifiers プロパティに格納された永続的オブジェクトで、事実上、各調整分類子が、HTTP 要求のカテゴリの定義です。カテゴリを定義するには、HTTP 要求の特性 (要求されたリソースのファイル名拡張子、特定のヘッダーの値、ユーザー エージェント、HTTP メソッド ("GET"、"POST" など) を任意に組み合わせて使用します。分類子には、カテゴリの要求が FirstStage または SecondStage のどちらで調整されるか、またはまったく調整されないかを指定する ThrottleLevel プロパティが含まれます。要求は、以下の規則に従ってブロックされるか、またはまったくブロックされません。

    • ワーカー プロセスの調整レベルが FirstStage の場合は、調整レベルが FirstStage のカテゴリ内のすべての要求、およびどの定義済みカテゴリにも属さない要求がブロックされます。

    • ワーカー プロセスの調整レベルが SecondStage の場合は、ワーカー プロセスの調整レベルが FirstStage のときにブロックされる要求の他に、調整レベルが SecondStage のカテゴリ内の要求もブロックされます。

注意

分類子と一致しない要求は FirstStage 調整モードでブロックされるので、第 2 段階までブロックしたくない要求がある場合は、その種類の要求すべてに対して分類子オブジェクトをプログラムによって作成し、ThrottleLevelSecondStage に指定されたオブジェクトを構築する必要があります。同様に、ある種の要求がブロックされないようにするには、ThrottleLevelNever に指定された分類子オブジェクトを構築する必要があります。分類子オブジェクトの詳細については、このトピックで後述する「要求分類子」を参照してください。

HTTP 503 エラーが、ブロックされた要求のクライアントに送信されます。

注意

要求が複数のカテゴリに属し、そのカテゴリの調整レベルがさまざまである場合、要求は最も厳しく調整されたカテゴリに従って調整されます。たとえば、FirstStage レベルで調整されたカテゴリの要求が、SecondStage に達した場合にのみ調整されるカテゴリにも属している場合、この要求は第 1 段階で調整されます。

登録済みパフォーマンス カウンター

SharePoint Foundation の初回インストール時に、最初の "SharePoint - 80" Web アプリケーションにパフォーマンス カウンターがいくつか自動的に登録され、監視および調整システムによる追跡管理が行われる場合があります。このカウンターは、プログラムによって、または SharePoint 管理シェルのコマンドレットを使用して、システムに追加したりシステムから削除したりできます。指定された任意の Web アプリケーションの登録済みカウンターのリストを取得するには、SharePoint 管理シェルの次のコマンドレットを使用します。

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

次の表は、SharePoint Foundation 管理者が監視する、Web アプリケーションの標準的なカウンターのリストです。

パフォーマンス カテゴリ

カウンター

インスタンス名 (複数ある場合)

メモリ

利用可能なメガバイト数

このカウンターには 1 つのインスタンスのみが含まれます。

ASP.NET

キューに登録された要求

このカウンターには 1 つのインスタンスのみが含まれます。

ASP.NET

要求の待機時間

このカウンターには 1 つのインスタンスのみが含まれます。

プロセッサ

秒あたりの中断数

_Total

Web アプリケーションのパフォーマンス カウンターをプログラムによって登録または再登録する方法については、「[方法] パフォーマンス カウンターの登録と登録解除」を参照してください。

要求分類子

HTTP 要求分類子は、SPRequestThrottleClassifier から派生したクラスのオブジェクトです。これらのオブジェクトは、HttpThrottleSettings.ThrottleClassifiers プロパティの値として構成データベースに保持されます。オブジェクト モデルには SPRequestThrottleClassifier 派生クラスがいくつかあります。これらのクラスのプロパティは読み取り専用なので、既存の要求分類子オブジェクトは変更できません。ただし、異なるプロパティ値を持つ新しい分類子オブジェクトをストアに追加して、古い分類子オブジェクトを削除することはできます。クラスはシールされていますが、各クラスの新しいオブジェクトを作成し、独自の分類子クラスを SPRequestThrottleClassifier から派生させることができます。以下の表は、クラスと、その各クラスを使用して定義できる要求カテゴリの種類を示しています。また、一致する要求が調整されるときの既定の調整レベルも示します。このレベルは、分類子オブジェクトの作成時に異なる調整レベルが指定されなかった場合に適用されます。

カテゴリ

既定の調整レベル

SPHttpFileExtensionThrottleClassifier

指定されたファイル名拡張子を持つリソースの要求

FirstStage

SPHttpHeaderThrottleClassifier

指定されたヘッダーが含まれる要求

FirstStage

SPHttpUserAgentAndMethodClassifier

指定されたユーザー エージェントを持つ要求、または指定された HTTP メソッドを使用する要求

Never

SPSearchCrawlingRequestClassifier

検索クローラーからの要求

FirstStage

注意

システムの既定では、どの分類子とも一致しない要求は第 1 段階でブロックされます。したがって、調整対象から除外する要求については、調整レベルが Never に指定された分類子オブジェクトを特別に作成する必要があります。

プログラムによる要求分類子オブジェクトの登録および登録解除の詳細については、「[方法] 要求分類子の作成および登録または登録解除を行う」を参照してください。分類子の新しいカテゴリの作成については、「[方法] 新しい要求分類子を作成する」を参照してください。

正常性スコア計算機能

正常性スコア計算機能により、パフォーマンス カウンターの未加工値 (または複数の未加工値に適用された関数の結果) が、0 ~ 10 の正常性スコアに変換されます。0 はカウンターが最も正常な状態であることを示し、10 は最も異常な状態であることを示します。計算機能は、SPHealthScoreCalculator から派生したクラスのオブジェクトです。オブジェクト モデルには SPBucketHealthScoreCalculator というクラスが既に存在します。このクラスのオブジェクトにより、カウンターの値の範囲が "バケット" と呼ばれる部分範囲に分割されます。このオブジェクトには CalculateScore(Double) メソッドが含まれ、このメソッドによって、値が分類されるバケットに基づいて正常性スコアがその値に割り当てられます。最も異常な状態を示す正常性スコア 10 は、最も異常なバケットの値にのみ指定されます。

バケット、つまり部分範囲の境界は、SPBucketHealthScoreCalculator オブジェクトの作成時に定義され、SetScoreBuckets([]) メソッドを使用して変更できます。

重要重要

バケットが SPBucketHealthScoreCalculator オブジェクトに渡されるように定義するときは、次の点に注意してください。

  • 監視対象のカウンターのうち少なくとも 1 つのカウンターの重みの平均値が、最も悪いスコア 10 を取得したときにのみ、SharePoint Foundation にハードコードされ、要求が調整されます。

  • SPBucketHealthScoreCalculator はシールされ、その CalculateScore(Double) は、最も異常なバケットのスコアにのみ 10 を割り当てます。

したがって、指定されたカウンターの重みの平均値がある特定の値に達したときに、調整をオンにする必要がある場合は、必ず、その値が最も異常なバケットに分類されるように、バケットを定義します。

CalculateScore(Double) メソッドの動作が異なるバケット スタイルの計算機能が必要な場合、または、バケット システムをまったく使用しない正常性スコア計算機能が必要な場合は、SPHealthScoreCalculator から新しいクラスを派生させて、必要に応じて CalculateScore(Double) メソッドを実装します。

正常性スコア計算機能オブジェクトは、SPPerformanceMonitorCreationData オブジェクトのプロパティとして構成データベースに保持されます。

正常性スコア計算機能の作成、および正常性スコア計算機能による作成データ オブジェクトを監視する割り当ての詳細については、「[方法] バケット スタイルの正常性スコア計算機能を作成、置換、および変更する」を参照してください。

関連項目

タスク

[方法] 要求調整システムの設定を変更する

[方法] パフォーマンス カウンターの登録と登録解除

[方法] 要求分類子の作成および登録または登録解除を行う

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

概念

[方法] 新しい要求分類子を作成する

[方法] 監視された値をプログラムで読み取る