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

时间:2012-07-03 03:04:38

标签: java jms ibm-mq websphere-7 mq

我发现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。

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

我相信你的mirco-benchmarking is flawed(使用错误的基准测试机制,你还包括i / o(开始和结束时间计算中的System.out.println)到图片中)。首先使用像Google's Caliper这样的工具来纠正数字,然后寻找答案。上次我知道(2003年我认为),MQ JMS实现是Java MQI类的包装,我们必须坚持使用Java MQI来满足我们的最佳吞吐量。

答案 2 :(得分:0)

WebSphere MQ JMS消息带有其他标头(称为JMS标头)以支持JMS消息传递方式。 JMSDestination,JMSReplyTo,JMSDeliveryMode,JMSType等以及提供程序特定的JMS头是JMS头的一部分。每次发送或接收消息时都会处理这些标头。

另一方面,WebSphere MQ Java类仅发送/接收纯WMQ消息。 WMQ消息将包含MQMD,后跟消息体。

所以你可以看到差异。 JMS消息的优点是它是基于标准的,并且JMS消息是可互操作的。