首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >websphere mq中的队列存储文件系统已满

websphere mq中的队列存储文件系统已满
EN

Stack Overflow用户
提问于 2011-07-25 20:33:55
回答 1查看 5.5K关注 0票数 4

在linux环境中,我们遇到了一个空队列占用磁盘空间的场景。

当文件系统变满时,我们的队列管理器意外结束,我们需要清空q文件来恢复队列管理器。

但实际上我们根本没有任何消息在队列中。这显示了一个特定的队列。

为什么磁盘空间放在这里?根本原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-25 23:54:24

WMQ不会实时收缩队列文件。例如,您的队列中有100条消息,您消费了第一条消息。然后,WMQ不会收缩文件并将所有消息上移一个位置。如果它试图对每条消息执行此操作,您将永远无法获得当前在产品中看到的吞吐量。

实际发生的情况是,WMQ将在处理生命周期的某些点收缩队列文件。在队列变空和队列下的文件缩小之间存在一些延迟,但这种延迟通常很小,以至于无法察觉。

您所描述的事件在理论上可以在一些非常特定的条件下发生,但它将是极其罕见的。事实上,在我从事WMQ工作的15年中,我只看到过几个缩小队列文件的延迟明显的例子。我猜这里实际发生的是你的一个假设或观察是错误的。例如:

队列实际上是空的吗?

  • 在你吹走文件后,队列肯定是空的。在清除文件之前,您如何知道它是空的?
  • 如果任何队列上有非持久消息,则在QMgr重新启动后,该队列将为空。这是另一种情况,在QMgr重新启动后队列可能显示为空,但在失败时不是空的。
  • 如果从同步点下的队列中检索到消息,则队列深度会减少,但该消息在队列文件中仍处于活动状态。如果在单个事务中清空了队列,它将保留队列的完整深度,直到提交发生为止。这会使队列看起来像是空的,而实际上不是空的。

实际上是队列文件填满了文件系统吗?

  • 日志扩展区可能会填满文件系统,即使是循环日志也是如此。例如,如果辅助扩展区的值较大,则日志文件可能会显著扩展,然后很快消失。
  • FDC文件可能会填满文件系统,具体取决于分配的方式。

它甚至是MQ吗?

  • 如果QMgr与其他用户或应用程序共享文件系统空间,则临时文件可能会填满空间。

我们经常看到的一个问题是,应用程序将尝试将超过5,000条消息放在一个队列中,并收到QFULL错误。然后,大多数人做的第一件事就是设置MAXDEPTH(999999999),以确保这种情况永远不会再次发生。这样做的问题是QFULL是一个软错误,应用程序可以从中恢复,但填满文件系统是一个硬错误,可能会导致整个QMgr宕机。设置MAXDEPTH(999999999)用可管理的软错误换取致命错误。MQ管理员有责任确保队列上的MAXDEPTH和MAXMSGL被设置为不会填满底层文件系统。在大多数商店中,在所有文件系统上都有额外的监控,以便在它们填满之前发出警报。

总而言之,在大多数情况下,WMQ在缩小队列文件方面做得非常好。特别是,当队列清空时,这是一个自然的同步点,在这个同步点上,文件可以收缩,这通常发生在队列清空后的几秒钟内。您可能遇到了一种罕见的竞争情况,即文件的收缩速度不够快,或者这里发生了一些在您的初始分析中不太明显的事情。在任何情况下,请管理MAXDEPTH和MAXMSGL,使任何队列都无法填满文件系统,并编写代码来处理QFULL条件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6816183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档