MSMQ の TCP/IP Nagle アルゴリズムを無効にする


現象


Microsoft Message Queue でトランスポート プロトコルとして TCP/IP を使ってメッセージを送信する際、パケットがネットワークに送信される前に約 300ms の遅延が生じることがあります。これは、Windows TCP/IP スタックが Nagle アルゴリズムを使用しているためです。Nagle アルゴリズムは効率的に TCP/IP パケットを使用し、ネットワークが小さな TCP/IP パケットであふれないようにすることでパフォーマンスを向上させますが、パフォーマンスに関する特定の理由から、状況によっては小さなパケットが送信されるようにした方が有利な場合もあります。この資料は、MSMQ がメッセージを送信する際に Nagle TCP/IP アルゴリズムを無効にする方法を記述したものです。


重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずレジストリの復元方法を理解しておいてください。復元方法の詳細については、Regedit.exe のヘルプ トピック「レジストリを復元する」、または Regedt32.exe のヘルプ トピック「レジストリ キーを復元する」を参照してください。

解決方法


マイクロソフトでは、現在この問題を修正する修正プログラムを提供中ですが、修正プログラムはこの資料に記載された問題のみを修正することを目的としており、障害があったコンピュータに対してのみ適用することを推奨します。


この問題を解決するには、Microsoft Product Support Services にお問い合わせの上、修正プログラムを入手してください。Microsoft Product Support Services の電話番号リストおよびサポート料金については、次の Web ページを参照してください。

: Microsoft Support Professional が、特定のアップデートを適用することにより問題が解決されると判断した場合、まれに、通常サポート依頼にかかる料金が免除されることがあります。ただし、特定のアップデートの対象とならない追加の質問および問題については、通常のサポート料金が適用されます。


修正プログラム (英語版) の属性は次のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。


日付 時刻 バージョン サイズ ファイル名 プラットフォーム
-------------------------------------------------------------
6/22/1999 1:34 PM 1.00.0294 481,552 MQQM.DLL x86

状況


マイクロソフトでは、この問題をこの資料の冒頭に記載したマイクロソフト製品の問題として認識しています。


この不具合は Windows NT 4.0 Service Pack 6 で修正済みです。

詳細


Nagle TCP/IP アルゴリズム

Nagle TCP/IP アルゴリズムは、Tinygram と呼ばれる小さなパケットによってネットワークが低速になる問題を回避するために設計されました。このアルゴリズムでは、TCP/IP 接続は、まだ応答を受けていない未解決の小さなセグメントを 1 つだけ持つことができます。"小さい" の定義はさまざまですが、普通は "セグメント サイズよりも小さい" という定義になります。イーサネットの場合、これは約 1500 バイトです。

Nagle アルゴリズムを手動で無効にする方法

次のレジストリ設定を修正し、「修正内容の適用」の手順を使用することにより、Nagle アルゴリズムを無効にすることができます。
  1. HKEY_LOCAL_MACHINE サブツリーの下で、次のキーに移動します。


    \Software\Microsoft\MSMQ\Parameters
  2. [編集] メニューの [キーの追加] をクリックし、以下の情報を使ってキーを追加します。

    値の名前 : TCPNoDelay
    データ型 : REG_DWORD
    文字列 : 1

    値の意味
    0 - Nagling 有効
    1 - Nagling 無効

修正内容の適用

レジストリに変更を加えた後は、キュー マネージャを停止して再起動する必要があります。これを行うには、コントロール パネルの [サービス] から Microsoft Message Queue Service を停止してから開始します。

関連情報


: Nagle アルゴリズムは、TCP/IP の RFC 896 で定義されています。

関連情報


この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID
235624 (最終更新日 2001-02-25) をもとに作成したものです。