2011-11-09 32 views
3

我們的系統中有許多MSMQ隊列,包括私有隊列和公共隊列。有時,從隊列中讀取的Windows服務將崩潰,因此消息將在該隊列中建立起來。一旦隊列達到一定的大小(可能是60K條消息),該服務器上的所有隊列將停止工作,從而導致資源不足的錯誤。如何增加可存儲在MSMQ中的郵件數

我的問題是,隊列真的在幕後工作,他們將消息存儲在RAM還是硬盤上?當服務器內存不足時,它是否耗盡資源並崩潰?如果它在硬盤上使用了一些分配的空間,有沒有辦法增加容許的大小?如果它使用RAM,我可以簡單地將RAM添加到服務器,然後這會增加允許的大小?

我需要確保當服務出現故障時,我們可以處理在該服務器上存儲100K或200K郵件的消息,因爲這些消息對我們的業務至關重要。

+0

60,000條消息是微不足道的,所以你的服務器在你開始之前必須已經在內核內存上非常低。添加RAM不會有幫助,因爲大多數現代機器都有足夠的RAM來最大化內核內存。您需要確定並刪除內核內存。配置良好的機器可以處理數百萬條消息。 –

回答

2

這是MSDN上的一篇文章,它似乎解決了您的問題(正如John指出的那樣,這僅適用於Windows Server 2000,因此大多數人應該可以忽略):Resource management in MSMQ applications。特別是:

對於MSMQ 1.0和MSMQ 2.0,能夠存儲在一臺機器上的消息的組合大小不限於機器中的RAM數量或硬盤大小,而是數量由操作系統提供給MSMQ服務的虛擬地址空間(此限制已在MSMQ 3.0中解除)。 x86機器中的每個進程都分配了一個虛擬的4 GB可尋址內存。 2GB保留用於內核模式,2GB用於用戶模式。 MSMQ隊列管理器以用戶模式運行,因此具有可尋址的2GB虛擬地址空間。每條消息的數據都存儲在RAM中,RAM由系統的頁面文件或存儲器映射文件進行備份。 MSMQ使用內存映射文件來存儲快速和可恢復的消息。由於我們僅限於2GB的可尋址內存,因此我們僅限於2GB的磁盤消息。當考慮到MSMQ代碼及其內部數據結構所使用的內存以及用於在磁盤上存儲消息文件的文件分配時,我們最終會在磁盤上存儲1.4GB到1.6GB的消息。

注意:通過在MSMQ服務上啓用3GB優化,1.6GB的這一限制可升至約2.6GB。有關如何啓用3GB調優的更多信息,請參閱Q171793

編輯:調整鏈接似乎被打破。我相信它應該指向here

對於MSMQ的後續版本而言,John在a blog post中討論了該問題。

消息

這其中的最大數量,不是那麼簡單的工作了。在我的資源不足後,我們知道每個消息都需要75字節的內核內存用於索引,因此,例如,200萬條消息將需要大約150兆字節。因此,看起來,所有你需要做的就是增加更多的RAM。不過,在比較了32位和64位內存架構之後,您將很快轉向64位平臺,以充分利用您的投資,因爲最大支持32位計算機,最大支持450 MB頁面緩衝池內存不管安裝的RAM數量多少。

但是,如果您正在嘗試確定需要多少RAM才能生成分頁池內存以容納10億MSMQ消息,那麼您的設計規範需要進行一些認真的審查。

+0

該鏈接已損壞。 – Justin

+0

調整鏈接似乎被打破。不幸的是,這篇文章直接引用了這篇文章:/我找到了另一篇有用的文章,詳細介紹了這個問題:http://blogs.msdn.com/b/johnbreakwell/archive/2006/09/18/insufficient-resources-run -away-run-away.aspx – Rohland

+2

比這篇博客文章更好的是「」MSMQ的限制是什麼?「如果我每次都有一個優惠......」 http://blogs.msdn.com/b/johnbreakwell/ archive/2008/02/29/what-are-msmq-s-limits-if-i-had-a-farthing-for-every-time.aspx –

0

不確定深入的答案,但無論如何,在表面層面,非事務性隊列將消息存儲在內存中,而事務性隊列將消息存儲在磁盤上。

UPDATE

正如約翰低於規定,所有郵件都保存在磁盤上是否使用耐用和非耐用的隊列。

+1

這是不正確的。所有消息都寫入磁盤。 Transactional和Recoverable消息以可在重新啓動後恢復的方式寫入磁盤。重新啓動後,Express消息會丟失。 http://blogs.msdn.com/b/johnbreakwell/archive/2008/04/04/why-are-my-express-messages-being-written-to-disk.aspx –

+1

謝謝約翰。看起來似乎是非直觀的,但我肯定會在產品中使用你的背景。 –

+1

確實如此。多年前,一位原始建築師糾正我之前,我一直在告訴人們錯誤的事情。 –

相關問題