首页 文章

“执行操作的资源不足 . ”当事务包含多条消息时,MSMQ

提问于
浏览
8

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

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

我've read the ' Insufficient Resources? Run away, run away! ' article but I' m不确定如何更改MSMQ的机器配额 .

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

System.Messaging.MessageQueueException (0x80004005): Insufficient resources to perform operation.

技术是C#和.Net 4.0,服务器是赢得2003 R2 SP2

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

3 回答

  • 4

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

  • 3

    只是添加问题编号#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

相关问题