【问题标题】:Using one Message Handle for several MQ message cause memory leaks?对多个 MQ 消息使用一个消息句柄会导致内存泄漏?
【发布时间】:2023-03-10 11:20:01
【问题描述】:

有人用过 RPG 的 MQ 吗? 问题如下。队列中有几条消息。它们都带有 RFH2 标头。每个标头都包含一组 NameValueData。 我正在创建一个消息句柄并将其传递给 MQGET。然后我使用 MQINQMP 检索属性。 题。当我在一个循环中读取多条消息时,对所有消息都使用相同的消息句柄实例(没有释放它并为每条消息重新创建它),我会出现内存泄漏吗?

【问题讨论】:

  • 这似乎是一个加载的问题 - 您是否看到内存泄漏的可能性并已确定这是一种可能性?显然,IBM 没有将接口设计成内存泄漏,但其中可能存在尚未修复的缺陷。

标签: ibm-mq rpgle rfh2


【解决方案1】:

IBM MQ 消息属性 API 旨在以下列方式使用。

MQOPEN
MQCRTMH

start-loop

MQGET
MQINQMP

end-loop

MQCLOSE
MQDLTMH

您可以在 IBM 提供的“C”示例 amqsbcg0.c 中看到这一点。我知道您的问题是针对 RPG 的,但底层 API 对所有语言都一样。

【讨论】:

  • 莫拉格,非常感谢!这正是我想知道的。你给出了我假设的使用 MQINQMP 的例子。不幸的是,我没有使用 MQ 的原始示例(我们在安装 MQ 时没有安装它们),并且文档中未涵盖此问题。从性能的角度来看,在每个 MQGET 之前调用 MQCRTMH 和在每个 MQINQMP 之后调用 MQDLTMH 非常糟糕,但是从内存泄漏的角度来看,我不确定在循环中调用 MQGET / MQINQMP 对是否安全。此外,该程序将在单独的 JOB 中 24/7 全天候运行。
  • 很高兴它帮助了@VictorPomortseff。如果答案有帮助,StackOverflow 的礼仪是通过点击勾选来接受答案。
  • 莫拉格,我的声望太低了无法投票...“你需要至少 15 声望才能投票,但你的反馈已被记录。”不幸的是,IBM 的文档在某些 API 的操作细节方面还有很多不足之处。所以你的回答很有帮助。
  • 发布问题的人就是接受答案的人。接受答案不同于对答案的质量进行投票。
  • To mark an answer as accepted, click on the check mark beside the answer to toggle it from greyed out to filled in. 这与点击答案旁边的向上箭头的问题不同。您只需要 15 声望即可投票,因此您现在可以同时拥有 31 声望。
猜你喜欢
  • 1970-01-01
  • 2013-11-11
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多