【问题标题】:Decreased performance in ActiveMQ Artemis after paging分页后 ActiveMQ Artemis 的性能下降
【发布时间】:2021-12-03 17:09:46
【问题描述】:

代理切换到分页模式后,我发现性能出现了奇怪的下降。一些消息开始需要很长时间: 1800 米 10 米 15 米 700米

我还看到很多磁盘使用情况:

我的broker.xml:

<configuration>
   <core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="urn:activemq:core ">
         
      <thread-pool-max-size>50</thread-pool-max-size>
      <name>0.0.0.0</name>


      <persistence-enabled>true</persistence-enabled>

      <journal-type>ASYNCIO</journal-type>

      <paging-directory>data/paging</paging-directory>

      <bindings-directory>data/bindings</bindings-directory>

      <journal-directory>data/journal</journal-directory>

      <large-messages-directory>data/large-messages</large-messages-directory>

      <journal-datasync>true</journal-datasync>

      <journal-min-files>2</journal-min-files>

      <journal-pool-files>10</journal-pool-files>

      <journal-file-size>10M</journal-file-size>

      <journal-buffer-timeout>16000</journal-buffer-timeout>

      <journal-max-io>4096</journal-max-io>
      
      <disk-scan-period>5000</disk-scan-period>

      <max-disk-usage>90</max-disk-usage>

      <critical-analyzer>true</critical-analyzer>

      <critical-analyzer-timeout>120000</critical-analyzer-timeout>

      <critical-analyzer-check-period>60000</critical-analyzer-check-period>

      <critical-analyzer-policy>HALT</critical-analyzer-policy>


      <acceptors>

         <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP;useEpoll=true;</acceptor>

         <acceptor name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>

      </acceptors>
   </core>
</configuration>

Linux Astra,4 CPU 24GB ram 50GB SSD,ActiveMQ Artemis 2.7.0

只有代理重启有帮助

【问题讨论】:

    标签: jms activemq-artemis messagebroker


    【解决方案1】:

    分页时性能会下降是意料之中的。这是因为消息是在磁盘之间进行分页的,而不是直接从 RAM 访问的。即使是最快的磁盘也比 RAM 慢得多,因此分页会降低性能。

    有几种方法可以缓解这种性能下降:

    • 为代理的 JVM 提供足够的堆空间,以便永远不会发生分页。
    • 使用flow-control 防止消息在代理上过多堆积而导致分页。
    • 确保消息消费跟上消息生产,以防止消息在代理上过度堆积而导致分页(例如添加更多消费者、提高现有消费者的性能等)。
    • 使用高速SSDs 而不是较慢的传统HDDs。

    我的猜测是您使用的主要是非持久消息,因此重新启动代理会清除这些消息并消除分页的需要,从而恢复正常性能。

    另外,由于您使用 ActiveMQ Artemis 2.7.0,我强烈建议您升级到latest release。自 2.7.0 发布到现在已经 2 年多了,并且在以后的版本中修复了许多错误并实现了新功能。

    【讨论】:

    • 谢谢回答。我试图理解 - 为什么有些消息消耗很快而有些消息很慢(都具有相同的大小) - 有些消息我无法接收超过 30 秒并由于我的网络服务器超时而崩溃
    • 接收邮件需要很长时间的原因可能有很多。如果没有有关您的用例和发生这种情况时代理状态的更多详细信息,就不可能说出为什么会发生这种情况。您可能想为此创建一个新问题,或者可能在ActiveMQ users mailing list 上启动一个新线程。
    • 至于崩溃,这听起来像是您的应用程序中的一个相当严重的错误。消费者总是有可能没有收到消息,因此它应该为这种情况做好准备并优雅地处理它。
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    相关资源
    最近更新 更多