java - PERSISTENT 消息的性能比 NON_PERSISTENT 消息慢得多

标签 java jms ibm-mq websphere-7 mq

我发现 PERSISTENT 消息的性能比 NON_PERSISTENT 消息慢得多。 我发送和接收non_persistent消息,性能如下。

Method      Number of Msg  Elapsed Time

    Sending   - 500 messages - 00:00:0332
    Receiving - 500 messages - 00:00:0281

我发送和接收持久化消息,性能如下。

    Sending   - 500 messages - 00:07:0688
    Receiving - 500 messages - 00:06:0934

此行为在 MQMessage 和 JMSMessage 中都会发生。

感谢所有帮助我解决问题的人。

特别感谢 Shashi、T.Rob 和 Pangea。

最佳答案

鉴于新标题,我发现我现在对这个问题有了回应。

是的,在所有其他方面都相同的情况下,持久消息总是比非持久消息花费更长的时间。不过,它们变慢的程度是高度可调的。为了获得您所看到的结果,队列管理器可能进行了许多最坏情况的调整。以下是一些适用的因素:

  • 磁盘是本地磁盘还是网络磁盘。对于与安装在旋转磁盘上的 NFS 通信的 100MBS 和更慢的连接,本地驱动器几乎总是快得多。 (然而,使用光纤 channel 和电池支持的缓存 Controller 安装到 SAN 几乎总是比本地旋转驱动器更快。)一个常见的例子是使用消费级 NAS 驱动器。尽管家庭 NAS 设备很棒,但吞吐量总是比本地磁盘慢。
  • 对于本地驱动器,驱动器的速度。较新的“绿色”驱动器会改变转速以节省电力。与 10k RPM 驱动器相比,即使是 7200RPM 磁盘也会表现出性能下降。
  • 对于本地驱动器,碎片程度。即使消息很小,它们也会被放入可能高度分散的预分配日志文件中。
  • 将磁盘和日志文件放在同一个本地卷上。这会导致 head 争用,因为在控制返回到应用程序之前,一条消息会写入两个文件。
  • 线性日志与圆形日志。线性较慢,因为日志格式化程序每次都必须分配新的。
  • 是否使用同步点。如果在单个工作单元中写入许多消息,WMQ 可以使用缓存写入并优化扇区放置操作。只有 COMMIT 需要成为阻塞调用。

由于非持久性消息完全在内存中处理,或者溢出到最多一个磁盘文件,因此它们不受大多数​​这些问题的影响。

关于java - PERSISTENT 消息的性能比 NON_PERSISTENT 消息慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303935/

相关文章:

java - 如何在一处显示所有错误? "x error found"的导航窗口?

Java 加密内存类加载器

java - WebSphere MQ 的 QueueConnectionFactory

java - 用于异步调用的 Apache Camel

monitoring - 如何配置 IIB 10 以将 monitoring_event 消息作为持久性发布到持久性 MQ 队列?

java - 运行配置中的 Eclipse Maven 依赖项?

java - 如何将一个 Spring Boot 应用程序作为依赖项包含在另一个应用程序中

Spring,JMS - 无法为 XML 架构命名空间找到 Spring NamespaceHandler

c# - 使用 SSL 连接到 MQ - 从哪里开始

java - 解析长日志文件时出错?