【问题标题】:What steps can be taken to optimize tibco JMS to be more performant?可以采取哪些步骤来优化 tibco JMS 以提高性能?
【发布时间】:2014-02-20 03:55:24
【问题描述】:

我们正在运行一个高吞吐量系统,该系统利用 tibco-ems JMS 将大量消息传入和传出我们的主服务器到我们的客户端连接。我们进行了一些统计并确定 JMS 是造成大量延迟的原因。我们如何使 tibco JMS 性能更高?是否有任何资源可以很好地讨论这个主题。

【问题讨论】:

  • 您是否尝试过询问 Tibco?它仍然是一个商业产品,不是吗?最好的信息可能来自他们。你能发布你看到的延迟和你正在做的测试吗?例如您是否启用了持久性?我希望他们在 1 毫秒左右收到一条小消息。
  • 我们确实启用了持久性。这可能是我们为减少延迟而采取的第一步。另一个是降低日志记录级别。问 Tibco 是个好建议。谢谢

标签: java performance jms tibco tibco-ems


【解决方案1】:

如果您不需要持久性,则使用非持久性消息是一种选择。 请注意,即使您确实需要持久性,有时最好使用非持久性消息,并且在发生崩溃时执行不同的恢复操作(例如重新发送所有消息)

这是相关的,如果:

  • 很少发生崩溃(因为恢复需要时间)
  • 您可以轻松检测到崩溃
  • 您可以处理重复的消息(您可能无法确切知道崩溃前发送了哪些消息

EMS 还提供了一些持久性机制,但不如经典的保证交付机制 其中包括:

  • 您可以使用“至少一次”或“最多一次”传递来代替“恰好一次”的消息传递。
  • 您可以使用预取机制,该机制会导致客户端在您的应用程序请求消息之前将消息提取到内存中。

【讨论】:

  • 如果需要持久性,磁盘 I/O 很可能会成为主要瓶颈。这将取决于磁盘解决方案、SAN、SSD 磁盘等。一个小的改进可能是使磁盘写入异步。
【解决方案2】:

EMS 不应成为瓶颈。我已经完成了测试,我们的服务器上的吞吐量非常大。

您需要尝试确定瓶颈在哪里。是消息的生产者还是消费者的问题。消息是否堆积在队列中。

你在做什么类型的场景。

Pub/sup 或请求回复? 你有临时队列堆积。太多的临时队列会导致性能问题。 (主要是当他们因为你没有正确关闭某些东西而徘徊时)

如果是,您是否发布到具有持久订阅者的主题。尝试将主题连接到队列并从中读取。持久订阅者也可能会导致性能出现小问题,因为它需要跟踪谁拥有所有消息的副本。

确保您的发送进程有一个会话和通过该会话的多个调用。不要为每个操作打开一个完整的会话。尽可能重复使用。为消费者做同样的事情。

确保完成后关闭。 EMS 并没有解决问题。因此,如果您建立连接并关闭您的应用程序,连接仍然存在并占用资源。

检查您在崩溃时对丢失消息的容忍度。如果您正在执行客户端确认,并且如果您在处理消息时崩溃并不重要,那么切换到自动。此外,我相信如果您使用的是(TEMS - Tibco EMS for WCF),会话确认会出现问题。所以一条消息只有在对整个消息进行处理时,我们才从客户端 ACK 切换到具有 Dups ok 并且效果更好的消息)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多