自從我做了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的客戶端才能完成安裝。
有一個想法:性能監視器對你的內存狀態問題有什麼看法?那裏有很多磁盤交換嗎?
什麼是MSMQ進程的內存大小有限? – 2009-10-29 14:57:14
我不確定你的意思?我在哪裏可以檢查MSMQ的內存限制? – mike 2009-10-29 23:23:49
你確定問題出在MSMQ上,而不是你正在使用的開源庫嗎?你是否跨過了實際從MSMQ讀取的代碼,並確認這是延遲的地方? – DSO 2009-10-30 14:27:05