当前位置: 首页 > 知识库问答 >
问题:

Apache ActiveMQ Artemis在分页开始后性能变慢

夹谷星剑
2023-03-14

我的broker.xml是:

<configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">
   <core xmlns="urn:activemq:core">

      <ha-policy>
         <replication>
            <master>
               <group-name>master</group-name>
               <check-for-live-server>true</check-for-live-server>
           </master>
         </replication>
      </ha-policy>

      <global-max-size>-1</global-max-size>

      <bindings-directory>/opt/broker/broker-data/bindings</bindings-directory>

      <journal-directory>/opt/broker/broker-data/journal</journal-directory>

      <large-messages-directory>/opt/broker/broker-data/largemessages</large-messages-directory>

      <paging-directory>/opt/broker-data/paging</paging-directory>

      <journal-min-files>25</journal-min-files>
      <journal-type>ASYNCIO</journal-type>
      <journal-max-io>5000</journal-max-io>
      <journal-sync-transactional>false</journal-sync-transactional>
      <journal-sync-non-transactional>false</journal-sync-non-transactional>
      <journal-buffer-timeout>750000</journal-buffer-timeout>
      
      <connectors>
         <connector name="netty-connector">tcp://node1:61616?tcpSendBufferSize=307200;tcpReceiveBufferSize=307200;writeBufferHighWaterMark=1228800;useEpoll=true;useNio=true</connector>
      </connectors>

      <acceptors>
         <acceptor name="netty-acceptor">tcp://node1:61616?tcpSendBufferSize=307200;tcpReceiveBufferSize=307200;writeBufferHighWaterMark=1228800;useEpoll=true;useNio=true</acceptor>
      </acceptors>

      <broadcast-groups>
         <broadcast-group name="my-broadcast-group">
            <group-address>${udp-address:231.7.7.7}</group-address>
            <group-port>9875</group-port>
            <broadcast-period>100</broadcast-period>
            <connector-ref>netty-connector</connector-ref>
         </broadcast-group>
      </broadcast-groups>

      <discovery-groups>
         <discovery-group name="my-discovery-group">
            <group-address>${udp-address:231.7.7.7}</group-address>
            <group-port>9875</group-port>
            <refresh-timeout>10000</refresh-timeout>
         </discovery-group>
      </discovery-groups>

      <cluster-connections>
         <cluster-connection name="my-cluster">
            <connector-ref>netty-connector</connector-ref>
            <connection-ttl>130000</connection-ttl>
            <call-timeout>120000</call-timeout>
            <retry-interval>500</retry-interval>
            <use-duplicate-detection>true</use-duplicate-detection>
            <message-load-balancing>ON_DEMAND</message-load-balancing>
            <max-hops>1</max-hops>
            <discovery-group-ref discovery-group-name="my-discovery-group"/>
         </cluster-connection>
      </cluster-connections>

      <security-settings>
         <security-setting match="#">
            <permission type="createNonDurableQueue" roles="amq"/>
            <permission type="deleteNonDurableQueue" roles="amq"/>
            <permission type="createDurableQueue" roles="amq"/>
            <permission type="deleteDurableQueue" roles="amq"/>
            <permission type="createAddress" roles="amq"/>
            <permission type="deleteAddress" roles="amq"/>
            <permission type="consume" roles="amq"/>
            <permission type="browse" roles="amq"/>
            <permission type="send" roles="amq"/>
            <permission type="manage" roles="amq"/>
         </security-setting>
      </security-settings>

      <address-settings>
         <address-setting match="activemq.management#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
         </address-setting>
         <address-setting match="#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!-- with -1 only the global-max-size is in use for limiting -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
            <auto-delete-addresses>false</auto-delete-addresses>
         </address-setting>
      </address-settings>
     
      <!-- address section -->
   </core>
</configuration>

编辑:最关键的问题是,一旦分页启动,broker将无法恢复到原来的性能,即使大部分消息都被消耗掉了。

共有1个答案

刘永望
2023-03-14

考虑到分页消息需要与持久消息类似地同步到磁盘,控制刷新频率的参数是page-sync-timeout。如果没有设置值,则使用默认值(请参见文档以了解该设置的用途)。

通过查看journal-buffer-timeout(假设设置正确),您的磁盘似乎相当慢,因此预计分页消息不会很好地执行,因为磁盘没有足够的IOPS。我将首先检查磁盘随机写入的预期IOPS是多少,并相应地设置page-sync-timeout(1/IOPS,单位为纳秒),但如果磁盘速度不够快,则不要期望任何改进。

另外注意:如果您不关心电源故障耐久性,您仍然可以禁用journal-datasync,并且它应该允许任何磁盘写入能够幸存下来,只是为了处理故障(即没有电源故障保证)。如果您正在使用无共享复制,这应该是可以的,因为备份能够在失败的情况下发挥作用。

 类似资料:
  • 在代理切换到分页模式后,我看到性能出现了奇怪的下降。一些消息开始花很长时间: 1800 我还看到了大量磁盘使用情况: 我的: Linux Astra、4 CPU 24GB ram 50GB SSD、ActiveMQ Artemis 2.7.0 只有代理重启有帮助

  • 在Kotlin中,如果变量在应用程序启动时为,并且在创建后不能再次赋值为,那么有什么方法可以对其进行注释吗? 我不能将field设置为例如,因为它可以在某个时候被置为空,或者,因为它在使用之前被初始化(或者这可能是解决我的情况的正确方法?)。

  • 好吧,这很烦人,我真的不知道该怎么解决,所以事情是这样的。 获得了一个返回分页数据的应用程序,如下所示: 检索结果需要花费很长时间。 但是,如果我调用like(使用上面安装的相同可分页对象): 并且存储库上有: 而且,结果马上就会出现。 我假设,对于第一种永远需要的情况,Spring首先检索所有数据(不限制行),然后返回一个带有结果数量信息的页面。 不知道是否与注释有关。 我使用的是2.3.0。顺

  • 本文向大家介绍jQuery从零开始做一个分页组件功能示例,包括了jQuery从零开始做一个分页组件功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery从零开始做一个分页组件功能。分享给大家供大家参考,具体如下: 开始一个组件,毫无目的的写代码是一个不好的习惯,要经历 分析 => 抽象 => 实现 => 应用 四个阶段。 组件DEMO地址:https://github.com

  • 为了学习wordpress的开发,我正在从头开始构建一个wordpress主题。现在我想在我的类别页面上添加分页,但问题是:当我单击older-post-link时,url从“http://localhost/WordPress4/category/Bloc1/page/2/”变为“http://localhost/WordPress4/category/Bloc1/page/2/”,但它将我带到

  • 对于大多数网站(尤其是博客),当文章越来越多的时候,就会有分页显示文章列表的需求。Jekyll 已经自建分页功能,你只需要根据约定放置文件即可。 在 Jekyll 3 中,需要在 gems 中安装 jekyll-paginate 插件,并添加到你的 Gemfile 和 _config.yml 中。在 Jekyll 2 中,分页是标准功能。 分页功能只支持 HTML 文件 Jekyll 的分页功能不