2009-10-19 209 views
3

我正在使用一個開源的.Net庫,它使用下面的MSMQ。大約一週或2周後,服務速度會減慢(不是準確定時,而是一般猜測)。看起來發生了什麼是來自MSMQ的消息只能每10秒鐘只讀一次。通常情況下,他們會立即閱讀。所以它們將在T + 10秒,T + 20秒,T + 30秒等時間內被讀取,而不管消息何時被髮送(即有時需要3秒鐘的時間讀取消息,其他時間9秒)。MSMQ緩慢隊列讀取

目前我恢復正常的方法是簡單地刪除&重新創建隊列。所以問題是,MSMQ隊列中可能產生什麼會導致這種減速?發生減速時,隊列中沒有消息。是否有任何先進的MSMQ分析工具可以讓您更深入地瞭解隊列(而不是計算機管理)?

哦,我忘了提及,將消息寫入隊列仍然是瞬間的。它只是讀取顯示此行爲的消息。

編輯:後續問題@here這是一個更詳細和更專注。

+0

什麼是MSMQ進程的內存大小有限? – 2009-10-29 14:57:14

+0

我不確定你的意思?我在哪裏可以檢查MSMQ的內存限制? – mike 2009-10-29 23:23:49

+0

你確定問題出在MSMQ上,而不是你正在使用的開源庫嗎?你是否跨過了實際從MSMQ讀取的代碼,並確認這是延遲的地方? – DSO 2009-10-30 14:27:05

回答

2

自從我做了MSMQ的東西以來,我已經有一段時間了,因此忍受着我的大腦記憶(忍耐)。 想到一些問題:

日誌隊列是否處於活動狀態?這是連接到一個隊列,如果隊列被刪除,我相信(不要引用我),該日記然後從空...

隊列上是否有清除進程? 這些事務隊列?

是否應用了所有當前的Service Pack?我似乎回想起在遙遠的過去一個服務包的修復。這可能與平臺有關,但您不會列出您的平臺。 我相信有這種性質的幾個服務包。

什麼是你的磁盤空間?您是否遇到磁盤空間問題或磁盤碎片問題?文件(如果我記得的話)存儲在windows \ system32 \ msmq下。如果沒有足夠的大小所需的塊,它可能會減慢速度 - 通常是存儲/接收消息,不確定讀取。

這些公共或私人隊列?

性能監視器對分頁池等有什麼看法?我相信它是每個消息70-80字節。

EDIT 1:

從MSDN文件檔案: 「專用隊列被登記在本地計算機上,而不是在目錄服務,並且它們的性質不能被遠程計算機上運行的消息隊列應用程序來獲得消息通過將每個隊列的描述存儲在本地計算機上的本地隊列存儲(LQS)文件夾的單獨文件中,排隊在本地註冊專用隊列。「

因此,如果目錄服務關閉,公用隊列不可用。另一方面,專用隊列存儲在本地文件系統中。

這臺機器應該有很多內存以避免磁盤交換隊列。我從來沒有試圖在Windows XP上運行MSMQ,坦率地說,由於性能問題 - 一直都在專用的服務器機箱上執行大量內存 - 但之後,我們正在處理大量排隊項目,每個大尺寸。 (成千上萬,附近各大小的限制)

編輯2:文件系統和空文件:

「空消息文件被刪除一次,每六個小時,默認情況下,這個時間間隔可以在控制。通過在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSMQ \ Parameters下設置MessageCleanupInterval REG_DWORD值,應用程序不應該讓遊標長時間不必要的打開,遊標可能指向已經接收到的消息(並從文件中刪除),這些指針會阻止清理並刪除空文件

注意:您應該在運行該磁盤時預留大量的可用空間nt碎片問題。你可以嘗試減少這6小時的時間,看看是否有幫助 - 所以它不必跟蹤空文件。

儘量確保機器上沒有任何其他可能導致驅動器碎片的活動 - 例如瀏覽互聯網。

在公共隊列中,有時候這會延長,以避免可能造成代價較高的Active Directory交互。 您需要在消息隊列會話的兩端添加此註冊表值。否則,具有最小值的計算機將過早地停止會話。將此註冊表值添加較大值的常見原因是使會話保持活動狀態,並避免創建消息隊列會話的開銷。在您的實例中,您可能需要縮短值以幫助進行文件系統管理。 (這是一個艱難的呼籲,坦率地需要考慮)。

至於熱修復: (可能更多的在那裏,而不是具體到你的問題,我可以看到)

http://support.microsoft.com/kb/304212描述的MSMQ 1.0修補程序。 此修補程序的原因是Windows XP消息隊列3.0獨立客戶端構建爲可靠的RPC客戶端。沒有此修補程序,從Windows XP消息隊列3.0獨立客戶端調用到MQLocateNext失敗。

RPC修復程序在http://support.microsoft.com/kb/823980中描述。 需要此修補程序才能在運行Windows XP的客戶端上啓用審覈。此修補程序還需要啓用運行Windows 2000的客戶端才能完成安裝。

有一個想法:性能監視器對你的內存狀態問題有什麼看法?那裏有很多磁盤交換嗎?

+0

請原諒我缺乏知識,因爲我不是MSMQ專家,只知道/通過這個第三方庫使用它。 - 日記帳已禁用且沒有日記郵件 - 如果清除您的意思是刪除郵件?隊列中有0條消息,並且減速仍然發生。它們是事務性隊列。 - 我很確定我的電腦已修補。是否有特定的MSMQ補丁可供下載?電腦是贏的。 XP - 大量的磁盤空間,碎片可能是一個問題,但我懷疑它 - 私人 - 小心解釋? – mike 2009-10-28 23:18:50

+0

對不起,最後的評論沒有很好地格式化......我還發現了一個名爲TMQ的工具,它似乎做了一些額外的分析。當再次放緩時,我會嘗試進一步調試。 – mike 2009-10-28 23:19:48

+0

是的,這裏是一個MS頁面的鏈接,詳細介紹了很多關於性能,內存,如何管理等方面的內容。 http://msdn.microsoft.com/en-us/library/ms811056.aspx 更多關於消息大小,數字等的細節可能是有用的,以及對維護商店的文件系統的檢查。 – 2009-10-29 12:59:43