3

システム全体に多数の MSMQ キュー (プライベート キューとパブリック キューの両方) があります。キューから読み取る Windows サービスがクラッシュすることがあるため、そのキューにメッセージが蓄積されます。キューが特定のサイズ (おそらく 60K メッセージ) に達すると、そのサーバー上のすべてのキューが機能しなくなり、リソース不足に関するエラーがスローされます。

私の質問は、キューが舞台裏で実際にどのように機能しているのか、メッセージを RAM またはハード ドライブに保存しているのかということです。サーバーの RAM が不足すると、リソースが不足してクラッシュしますか? ハードドライブに割り当てられたスペースを使用している場合、許容サイズを増やす方法はありますか? RAM を使用している場合、サーバーに RAM を追加するだけで許容サイズを増やすことができますか?

サービスがダウンした場合、サービスの修正に取り組んでいる間、そのキューに 100K または 200K のメッセージを格納できるようにする必要があります。これらのメッセージはビジネスにとって重要だからです。

4

2 に答える 2

2

これがMSDNに関する記事で、あなたの質問に対処しているようです(Johnが以下で指摘しているように、これはWindows Server 2000にのみ適用されるため、ほとんどの人はおそらく無視する必要があります):MSMQアプリケーションのリソース管理。具体的には:

MSMQ1.0およびMSMQ2.0の場合、1台のマシンに格納できるメッセージの合計サイズは、マシンのRAMの量やハードディスクのサイズではなく、MSMQに提供される仮想アドレス空間の量に制限されます。オペレーティングシステムによるサービス(この制限はMSMQ 3.0で解除されました)。x86マシンの各プロセスには、仮想4GBのアドレス可能なメモリが割り当てられます。2GBはカーネルモードで使用するために予約されており、2GBはユーザーモードで使用するために予約されています。MSMQキューマネージャはユーザーモードで動作するため、アドレス指定可能な2GBの仮想アドレス空間を使用できます。各メッセージのデータはRAMに保存され、RAMはシステムのページングファイルまたはメモリマップファイルによってバックアップされます。MSMQは、メモリマップトファイルを使用して、エクスプレスメッセージとリカバリ可能なメッセージの両方を保存します。アドレス可能なメモリは2GBに制限されているため、ディスク上のメッセージは2GBに制限されています。MSMQコードとその内部データ構造で使用されるメモリ、およびメッセージファイルをディスクに保存するためのファイル割り当てを考慮すると、ディスクに保存できるメッセージは1.4GBから1.6GBになります。

注この1.6GBの制限は、MSMQサービスで3GBのチューニングを有効にすることで約2.6GBに引き上げることができます。3GBチューニングを有効にする方法の詳細については、 Q171793を参照してください。

編集:チューニングリンクが壊れているようです。ここを指しているはずだと思います。

MSMQの新しいバージョンに関して、ジョンはブログ投稿でこの問題について説明しています。

メッセージの最大数

これは簡単に解決できません。Insufficient Resourcesの投稿から、各メッセージにはインデックス作成のために75バイトのカーネルメモリが必要であることがわかっています。たとえば、200万のメッセージには約150メガバイトが必要です。したがって、必要なのはRAMを追加することだけのようです。ただし、32ビットと64ビットのメモリアーキテクチャの比較を検討した後、32ビットマシンは最大450 MBのページプールメモリであるため、投資を活用するには、すぐに64ビットプラットフォームに移行する必要があります。取り付けられているRAMの量に関係なく。

ただし、繰り返しになりますが、10億のMSMQメッセージに対応するために必要なページプールメモリを生成するRAMの量を計算しようとしている場合は、設計仕様を真剣に検討する必要があります。

于 2011-11-09T20:26:12.437 に答える
0

詳細な答えについてはわかりませんが、とにかく表面レベルでは、非トランザクション キューはメッセージをメモリに格納しますが、トランザクション キューはメッセージをディスクに格納します。

アップデート

John が以下で述べているように、すべてのメッセージは永続キューまたは非永続キューが使用されているかどうかにかかわらず、ディスク上に保持されます。

于 2011-11-09T20:18:27.293 に答える