【问题标题】:Disk full made MQ dead磁盘已满导致 MQ 死机
【发布时间】:2018-06-19 02:56:54
【问题描述】:

我们有一个使用 WebSphere MQ 7.0.1.3 的应用程序。在我们的舞台环境中进行广泛测试期间,磁盘已满。

此后,MQ 挂起。我们删除了应用程序日志(与 MQ 无关)并添加了更多磁盘,但并没有解决问题。

我们尝试重新启动队列管理器:

$ endmqlsr
$ endmqm XYZ
$ strmqm XYZ
WebSphere MQ queue manager 'XYZ' starting.
WebSphere MQ was unable to display an error message 893.

磁盘已满并发生错误时的日志:

----- amqxfdcx.c : 828 --------------------------------------------------------
06/08/2018 03:36:44 AM - Process(8832.5) User(mqm) Program(amqzlaa0)
AMQ6119: An internal WebSphere MQ error has occurred (Rc=28 from write)
----- amqxfdcx.c : 783 --------------------------------------------------------
06/08/2018 03:36:44 AM - Process(8832.5) User(mqm) Program(amqzlaa0)
AMQ6184: An internal WebSphere MQ error has occurred on queue manager XYZ.
----- amqxfdcx.c : 822 --------------------------------------------------------
06/08/2018 03:36:46 AM - Process(8832.5) User(mqm) Program(amqzlaa0)
AMQ6119: An internal WebSphere MQ error has occurred (Rc=28 from write)
----- amqxfdcx.c : 783 --------------------------------------------------------
06/08/2018 03:36:46 AM - Process(8832.5) User(mqm) Program(amqzlaa0)
AMQ6184: An internal WebSphere MQ error has occurred on queue manager XYZ.
AMQ6119: An internal WebSphere MQ error has occurred ('28 - No space left on device' from semget.)
----- amqxfdcx.c : 783 --------------------------------------------------------
06/14/2018 02:35:46 PM - Process(6794.1) User(mqm) Program(amqzxma0)
AMQ6184: An internal WebSphere MQ error has occurred on queue manager XYZ.
----- amqxfdcx.c : 822 --------------------------------------------------------
06/14/2018 02:35:46 PM - Process(6794.1) User(mqm) Program(amqzxma0)
AMQ6118: An internal WebSphere MQ error has occurred (20006037)

尝试与 IBM WebSphere MQ Explorer 连接时

Queue manager not available for connection - reason 2059. (AMQ4043)
Severity: 20 (Error)
Explanation: The attempt to connect to the queue manager failed. This could be because the queue manager is incorrectly configured to allow a connection from this system, or the connection has been broken.
Response: Ensure that the queue manager is running. If the queue manager is running on another computer, ensure it is configured to accept remote connections.

有没有办法清除队列中的所有消息并重置所有标志,以便队列管理器启动并且队列再次工作?

队列中只有旧的测试数据,没有任何价值。

或者您对如何解决此问题有任何其他建议?

【问题讨论】:

  • 你检查过生成的FDC文件吗?也许它会提供有关错误的更多详细信息。
  • @JoshMc 您的第二条建议成功了。这就是我的问题的答案。在遇到很多问题后,我开始将 MQ 更新到 7.0.1.14。之后,我按照您链接到的演示文稿进行操作,这就是解决方案。
  • @buzztr 我已经添加了一个答案,其中包含我之前留给你的 cmets 的详细信息(以及更多)。如果您觉得这有帮助,请接受答案并为您认为合适的点赞。
  • @JoshMc 很好的答案。我认为第二个项目符号“使用 qm.ini ...”可能会更清楚,如果它说“使用现有的 qm.ini 来计算 crtmqm 命令的参数,例如:”也许表明 logPrimaryFiles 部分是输出来自“$ cat /var/mqm/qmgrs/_oldQmgrName_/qm.ini”?

标签: ibm-mq


【解决方案1】:

您可以使用mqrc 命令提供有关错误的更多信息。大多数情况下,MQ 将返回代码报告为四位十进制数。在这种情况下,由于返回码是三位数,它通常(总是?)意味着它是一个十六进制返回码。

$ mqrc 2195

      2195  0x00000893  MQRC_UNEXPECTED_ERROR

当 MQ 遇到意外的错误情况时,将引发此错误。通常您会发现在/var/mqm/errors 目录中创建了一个 FDC 文件,该文件可以提供更多详细信息。


当您收到此类错误时,最好的做法是向 IBM 打开 PMR,并让他们提供恢复指导,以确保您有最好的机会保留队列中可能存在的消息,但是您使用自 2015 年 9 月 30 日起不再支持的 MQ (7.0) 版本。您使用的特定 Fix Pack (7.0.1.3) 已于 2010 年 8 月发布。IBM 的 v7.0 的最后一个版本是 7.0.1.14 2016 年 8 月。

如果您向 IBM 支付扩展支持费用,您可以与他们一起开设 PMR 以获得进一步支持。

解决问题后的最佳前进路径是迁移到受支持的 IBM MQ 版本。目前 v8.0 和 v9.0 是目前唯一受支持的 IBM MQ 版本。


假设您没有扩展支持并且无法从 IBM 获得帮助,以下是一些建议步骤:

  1. 更新到最新的 Fix Pack (7.0.1.14) 可能会有所帮助,如果它不能解决问题,最好使用不受支持的 IBM MQ 版本的最新 Fix Pack。

  2. 您可以尝试冷启动队列管理器,看看是否有帮助。从演示文稿的第 4 页开始记录这一点 "WebSphere MQ Disaster Recovery" given by Mark Taylor at Capitalware's MQ Technical Conference v2.0.1.3

  • 创建一个与失败的完全一样的队列管理器

    • 使用 qm.ini 计算 crtmqm 命令的参数

      Log:
        LogPrimaryFiles=10
        LogSecondaryFiles=10
        LogFilePages=65535
        LogType=CIRCULAR
      
  • 发出 crtmqm 命令

    • crtmqm -lc -lf 65535 -lp 10 -ls 10 –ld /tmp/mqlogs TEMP.QMGR
    • 确保该目录中的新日志文件有足够的空间
  • 虚拟队列管理器的名称无关

    • 只关心获取日志文件
  • 不要启动这个虚拟队列管理器,只需创建它

  • 用新日志替换旧日志和 amqhlctl.lfh

    • cd /var/mqm/log
      mv QM1 QM1.SAVE
      mv /tmp/mqlogs/TEMP!QMGR QM1
      
    • 注意“损坏”的目录名称……这是正常的

  • 如果消息是持久的,则保留队列中的数据

  • 对象定义也被保留

    • 对象在其文件中包含自己的定义
    • QMQMOBJCAT 中保存的文件和对象名称之间的映射

完成上述所有操作后,请尝试启动您的队列管理器。

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多