【问题标题】: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。

【问题讨论】:

  • 您可能会泄漏资源(内存、句柄等)。
  • 我同意,手柄是我的赌注。什么操作系统?

标签: msmq


【解决方案1】:

来自 John Breakwell 的博客有十一种可能性:

  1. 用于远程读取的线程池已用尽(仅限 MSMQ 2.0)。
  2. 超过本地回调线程数
  3. 消息量已超过 系统可以处理什么(MSMQ 2.0 仅)。
  4. 分页池内核内存是 筋疲力尽。
  5. 二进制文件不匹配。
  6. 邮件过大。
  7. 已超出计算机配额。
  8. 打开一个路由时出现问题 事务性外部队列(MSMQ 仅限 3.0)
  9. 磁盘空间不足。
  10. 移动设备上的存储问题
  11. 聚集过多的 MSMQ 资源
  12. 打开的连接太多
  13. 计算机名超过 15 个字符
  14. 死信队列中的消息过多

http://blogs.msdn.com/johnbreakwell/archive/2006/09/18/761035.aspx

我会检查您的队列版本以及出错时您的队列打开的连接数量(往返)。这些“可能”中的任何一个都会导致您的错误。

【讨论】:

  • 这是打开的连接数。存在一个错误,它会在循环中打开连接并且永远不会关闭它们。
  • 究竟什么是队列的“连接”?我正在使用 .NET 托管 API 进行消息队列,而 MSDN 文档从未提及“连接”的概念。
  • 在.NET中,每个MessageQueue对象都被认为是一个连接,所以你需要Dispose他们。
【解决方案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 对我来说是解决它的问题。

      【讨论】:

        猜你喜欢
        • 2014-11-24
        • 2011-07-16
        • 2014-06-05
        • 2014-02-12
        • 1970-01-01
        • 2012-05-13
        • 1970-01-01
        • 2018-02-08
        • 1970-01-01
        相关资源
        最近更新 更多