【问题标题】:"Insufficient resources to perform operation." MSMQ when transaction contains multiple messages“资源不足,无法执行操作。”事务包含多条消息时的 MSMQ
【发布时间】:2011-07-16 11:18:24
【问题描述】:

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

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

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

应用日志有以下条目:

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

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

任何想法为什么我会得到这个?

【问题讨论】:

  • 如果您只查看导致问题的 27 条消息,那么设置配额不是您想要查看的地方。我的博文中的第 4 项更有可能是您想要调查的内容。
  • 约翰,感谢您的提醒
  • 其中一条消息似乎超过了 4 Mb 的限制,一旦整理出来,它似乎可以正常工作
  • 我的问题是你的博客文章中的#7。在您精彩的帖子的帮助下解决了这个问题!谢谢约翰。
  • 查看下面 ChocoSmith 的回答,它有一个工具链接

标签: c# .net msmq


【解决方案1】:

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

【讨论】:

【解决方案2】:

仅添加第 7 期存储空间和 Mitch's Answer。

您的配额大小是磁盘上的物理大小,而不是队列报告的大小(如 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

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 2014-11-24
    • 2010-12-16
    • 2014-02-12
    • 2022-01-01
    • 2012-04-12
    • 2012-07-13
    • 1970-01-01
    • 2021-01-28
    • 2011-11-30
    相关资源
    最近更新 更多