Exchange Server 2010(SP1)は規定の設定のままでは高負荷時にメール配送遅延が発生します。

今回はExchange Server 2010の高負荷時の挙動についてです。特にシステム導入前にLoadGeneratorで実際にパフォーマンス試験を行うような場合に規定値のままでは問題が発生してしまいますので注意してください。

規定値から設定変更すべき項目

現時点(2012/03/05)ではExchange Server 2010 SP1導入時にはSet-TransportServerコマンド及びEdgeTransport.exe.configの値を変更すべきです。規定値のままで動作させた際に、制限値に到達し、問題が発生するケースが多数報告されています。具体的な設定変更すべき項目等をここに書きたいのですが、残念ながら業務上得た知識なので、公開されているもの以外はここに書けません。(他の皆さんはどうされているのでしょうかね・・・)

ネット上に情報があるものとしては以下のものが確認できました。

The new keys and their values are:

<add key="RecipientThreadLimit" value="2" />

 

<add key="MaxMailboxDeliveryPerMdbConnections" value="3" />

Set-TransportServer

MaxConcurrentMailboxDeliveries

このパラメーターには、メッセージをメールボックスに配信するためにハブ トランスポート サーバーが同時に開くことができる配信スレッドの最大数を指定します。ハブ トランスポート サーバーのストア ドライバーは、メールボックス サーバーへのメッセージの配信とメールボックス サーバーからのメッセージの受け付けを行います。この制限は、Exchange 組織内のすべてのメールボックスへのメッセージの配信に適用されます。MaxConcurrentMailboxDeliveries パラメーターの既定値は 20 です。

Set-TransportServer

MaxConcurrentMailboxSubmissions

このパラメーターには、メールボックスからメッセージを受け付けるためにハブ トランスポート サーバーが同時に開くことができる配信スレッドの最大数を指定します。ハブ トランスポート サーバーのストア ドライバーは、メールボックス サーバーへのメッセージの配信とメールボックス サーバーからのメッセージの受け付けを行います。この制限は、Exchange 組織内のすべてのメールボックスからの新しいメッセージの受け付けに適用されます。MaxConcurrentMailboxSubmissions パラメーターの既定値は 20 です。

Set-TransportServer

MaxConnectionRatePerMinute

このパラメーターには、ハブ トランスポート サーバーまたはエッジ トランスポート サーバーに対して開くことができる新しい受信接続の最大数を指定します。これらの接続は、サーバーに存在する任意の受信コネクタに対して開かれます。MaxConnectionRatePerMinute パラメーターの既定値は 1 分あたり 1200 接続です。

Set-TransportServerまたは

トランスポート サーバーのプロパティ

MaxOutboundConnections

このパラメーターには、ハブ トランスポート サーバーまたはエッジ トランスポート サーバーが同時に開くことができる同時送信接続の最大数を指定します。送信接続には、サーバーに存在する送信コネクタが使用されます。MaxOutboundConnections パラメーターで指定された値は、トランスポート サーバーに存在するすべての送信コネクタに適用されます。MaxOutboundConnections パラメーターの既定値は 1000 です。unlimited という値を入力すると、送信接続の数に制限が適用されません。

この値は、EMC を使用しても構成できます。

Set-TransportServerまたは

トランスポート サーバーのプロパティ

MaxPerDomainOutboundConnections

このパラメーターには、インターネットに直接接続されたハブ トランスポート サーバーまたはエッジ トランスポート サーバーが単一のリモート ドメインに対して開くことができる接続の最大数を指定します。リモート ドメインへの送信接続には、サーバーに存在する送信コネクタが使用されます。MaxPerDomainOutboundConnectionsパラメーターの既定値は 20 です。unlimited という値を入力すると、送信接続の数に制限が適用されません。

この値は、EMC を使用しても構成できます。

Set-TransportServer

PickupDirectoryMaxMessagesPerMinute

このパラメーターには、ピックアップ ディレクトリおよび再生ディレクトリの両方のメッセージ処理速度を指定します。各ディレクトリは、PickupDirectoryMaxMessagesPerMinute パラメーターで指定された処理速度でそれぞれ独立してメッセージを処理できます。既定では、ピックアップ ディレクトリは、1 分あたり 100 メッセージを処理できます。またこれと同時に、再生ディレクトリは、1 分あたり 100 メッセージを処理できます。

ピックアップ ディレクトリと再生ディレクトリは、新しいメッセージ ファイルを 5 秒ごとに (つまり 1 分間に 12 回) スキャンします。この 5 秒のポーリング間隔は構成できません。これは、各ポーリング間隔に処理できるメッセージの最大数が PickupDirectoryMaxMessagesPerMinute パラメーターに割り当てた値を 12 で割った値 (PickupDirectoryMaxMessagesPerMinute/12) であることを意味します。既定では、最大 8 個を少し超えるメッセージを 5 秒の各ポーリング間隔に処理できます。

他にも色々なところに色々な制限値があります・・・。

 

発生する事象

規定値のままで負荷をかけると以下のような事象が発生します。

  • クライアント側
    • Outlookからメールを送信後、送信トレイに入ったまま処理されない(オンラインモード)、送信済みアイテムに入るが届かない(キャッシュモード)。
    • 会議出席依頼メールを送信すると、自分の予定表には反映されるが、他人の予定表には反映されない。
    • 予定表の利用等、その他の作業には支障ない。
  • サーバー側
    • 目立ったパフォーマンス劣化は見られない。ボトルネックになるようなパフォーマンスカウンタの値も見られない。
    • HUBサーバー上のキューに滞留は見られない。
  • 負荷低減後
    • 負荷をかけ終わった後から数十分かけて順次メールが処理され、配送されます。

実際には、MBXからHUBへメールが送られる部分でメールが滞留しており、負荷が低くなるまでメールが送信されない状態になります。パフォーマンステスト時に負荷をかけ、パフォーマンスモニタでパフォーマンスデータを見ているだけだと異常には気が付かないケースが多いと思いますが、同時にOutlookクライアント上で動作確認を行うと現象に気がつくと思います。

問題なのか、問題ではないのか

この動きは、Exchange Server 2010およびSP1の規定値で裁くことの出来るメールの流量を超えてしまうことで発生していると考えられます。サーバー上の各種カウンタの値は正常値であり、その他の処理はレスポンス遅延もなく処理できることからも確実にそう言えます。ですが、実際問題としてメール送信後、送信トレイに残り続けたり、宛先にメールが到着しないようであればこれは大きな問題となります。

意図的に制限した値によってこのような動きになっているのですから「正しく、制限されている」という言い方もできると思いますが、個人的にはここの制限は厳しすぎるものであり、規定値として相応しくない値が規定値になってしまっているものと考えます。設定の変更になるので各自自己責任での実施となりますが、問題が起きないうちに緩めておき、万が一制限値を緩めることによる弊害が確認された場合に制限値を厳しくすべきだと思います。

余談

ちなみに、そもそも論として負荷をかけるツールであるLoad Generatorがまともに動かないという報告があちこちから聞こえてきます。Exchange Server 2010はパフォーマンステスト及び設定値チューニングが適切にできていない印象がかなりあります。実際に複数のトラブルが確認されています。皆さん気をつけて下さい。

子供3人。家族優先。都内SIer勤務。Windows系中心のインフラよりの何でも屋。脱原発。 Microsoft MVP for Cloud and Datacenter Management.

コメントを残す

メールアドレスが公開されることはありません。