MSMQ:从队列接收时,啥会导致“资源不足以执行操作”错误?
Posted
技术标签:
【中文标题】MSMQ:从队列接收时,啥会导致“资源不足以执行操作”错误?【英文标题】:MSMQ: What can cause a "Insufficient resources to perform operation" error when receiving from a queue?MSMQ:从队列接收时,什么会导致“资源不足以执行操作”错误? 【发布时间】:2010-12-16 11:50:34 【问题描述】:MSMQ:从队列接收时,什么会导致“资源不足以执行操作”错误?
当时队列只保存 2,000 条消息,每条消息的大小约为 5KB。
【问题讨论】:
您可能会泄漏资源(内存、句柄等)。 我同意,手柄是我的赌注。什么操作系统? 【参考方案1】:来自 John Breakwell 的博客有十一种可能性:
-
用于远程读取的线程池已用尽(仅限 MSMQ 2.0)。
超过本地回调线程数
消息量已超过
系统可以处理什么(MSMQ 2.0
仅)。
分页池内核内存是
筋疲力尽。
二进制文件不匹配。
邮件过大。
已超出计算机配额。
打开一个路由时出现问题
事务性外部队列(MSMQ
仅限 3.0)
磁盘空间不足。
移动设备上的存储问题
聚集过多的 MSMQ 资源
打开的连接太多
计算机名超过 15 个字符
死信队列中的消息过多
http://blogs.msdn.com/johnbreakwell/archive/2006/09/18/761035.aspx
我会检查您的队列版本以及出错时您的队列打开的连接数量(往返)。这些“可能”中的任何一个都会导致您的错误。
【讨论】:
这是打开的连接数。存在一个错误,它会在循环中打开连接并且永远不会关闭它们。 究竟什么是队列的“连接”?我正在使用 .NET 托管 API 进行消息队列,而 MSDN 文档从未提及“连接”的概念。 在.NET中,每个MessageQueue
对象都被认为是一个连接,所以你需要Dispose
他们。
该链接已损坏。使用docs.microsoft.com/en-us/archive/blogs/johnbreakwell/…【参考方案2】:
我有同样的错误信息,解决方法很简单。
有很多消息位于各种队列中,并且已达到存储限制。我去了:
服务器管理器 -> 功能
右键单击消息队列
选定的属性
在“常规”选项卡中取消勾选存储限制
我被告知使用 MSMQ 的服务将重新启动,然后错误就消失了。
【讨论】:
很好的说明。虽然我仍然会设置一个限制......让它变得“尽可能大”会带来填满硬盘驱动器的风险。这可能会导致比 msmq 的“Invalid resources to perform operation”更严重的错误。 没错,尽管监控硬盘空间非常容易,而且 IT 部门不必知道任何其他需要注意的限制。 也可以通过Computer Managment
访问-> Message Queuing
,右键-> Properties
【参考方案3】:
我的传出队列中有太多失败的消息。 检查系统队列 -> 死信消息。我清除了这个队列,它又可以正常工作了。
【讨论】:
这也为我解决了这个问题,除了它是“事务性死信队列”【参考方案4】:我遇到了同样的错误,在检查了上面提到的事情后发现是导致问题的计算机名称!它超过了 15 个字符,在我将其更改为较短的字符后,问题就消失了。
【讨论】:
【参考方案5】:如果启用了日志,您将存储从队列中删除的所有消息的副本,因此您也可能会达到 MSMQ 日志限制。短期修复可能是清除队列的日志,长期 - 禁用日志。
【讨论】:
【参考方案6】:对我来说,问题不在于托管队列的机器。将消息发送到队列的机器。我注意到源机器上的“Outgoing Queues”显示了大量消息,这导致我进入MSMQ Messages Are Stuck In The Outgoing Queue。在源机器上重新安装 MSMQ 对我来说是解决它的问题。
【讨论】:
以上是关于MSMQ:从队列接收时,啥会导致“资源不足以执行操作”错误?的主要内容,如果未能解决你的问题,请参考以下文章