“没有足够的资源来执行操作。”事务包含多条消息时的MSMQ

时间:2011-03-16 10:03:25

标签: c# .net msmq

我正在将应用程序从一个服务器移动到另一个服务器,新服务器返回“着名的” - “执行操作的资源不足”。消息当代码尝试向队列发送多条消息时,该进程被包装在一个事务(TransactionScope)中。旧服务器正确执行代码,所有消息(约150个)按预期发送到队列,但新服务器在apporx 27处失败。

现在消息大小很小,队列中的消息数为零。

我已阅读“Insufficient Resources? Run away, run away!”文章,但我不确定如何更改MSMQ的机器配额。

应用程序日志包含以下条目:

System.Messaging.MessageQueueException(0x80004005):执行操作的资源不足。

技术是C#& .Net 4.0,服务器是win 2003 R2 SP2

为什么我得到这个?

3 个答案:

答案 0 :(得分:8)

其中一条消息超出了4 Mb的限制 - 一旦对此进行了排序,一切都按预期工作。

答案 1 :(得分:4)

只需为问题编号#7存储空间和Mitch的答案添加。

您的配额大小是磁盘上的物理大小,而不是队列报告的大小(在QueueExplorer或性能监视器等应用程序中报告)。

所以即使你已经清除了你的队列,你实际上并没有将它们从磁盘中删除(它意味着每六个小时清除一次) -

默认位置是C:\ Windows \ System32 \ msmq \ storage,或者从Mitch的答案中的第一个链接获取。

要清理,您不能只删除文件。

尝试以下脚本(另存为myScript.vbs)。 使用以下命令从命令提示符以管理员身份运行:

cscript myScript.vbs

Option Explicit

Dim mqa
set mqa = WScript.CreateObject("MSMQ.MSMQApplication")

WScript.Echo "Bytes in all queues: " + CStr(mqa.BytesInAllQueues)

mqa.Tidy

WScript.Echo "MSMQ cleaned up"

在此之后,我们的文件从1Gb下降到大约50mb,即使队列中的字节报告为40mb。

归功于主题:https://groups.google.com/forum/#!topic/microsoft.public.msmq.performance/jByfXUwXFw8

答案 2 :(得分:3)