分页后 ActiveMQ Artemis 的性能下降
Decreased performance in ActiveMQ Artemis after paging
代理切换到分页模式后,我发现性能出现奇怪的下降。有些消息开始需要很长时间:
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 内存 50GB SSD,ActiveMQ Artemis 2.7.0
只有代理重启有帮助
分页时预计性能会下降。这是因为消息被分页到磁盘和从磁盘分页,而不是直接从 RAM 访问。即使是最快的磁盘也比 RAM 慢得多,因此分页会降低性能。
有几种方法可以缓解这种性能下降:
- 为代理的 JVM 提供足够的堆 space 以便永远不会发生分页。
- 使用 flow-control 防止消息在代理上过度堆积导致分页。
- 确保消息消费跟上消息生产,以防止消息在代理上过度堆积导致分页(例如添加更多消费者、提高现有消费者的性能等)。
- 使用高速SSDs instead of slower traditional HDD秒。
我的猜测是您使用的大部分是非持久消息,因此重新启动代理会清除这些消息并消除寻呼的需要,从而恢复正常性能。
此外,由于您使用的是 ActiveMQ Artemis 2.7.0,我强烈建议您升级到 latest release。自 2.7.0 发布以来已经过去了 2 年多,并且在以后的版本中修复了许多错误并实现了新功能。
代理切换到分页模式后,我发现性能出现奇怪的下降。有些消息开始需要很长时间: 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 内存 50GB SSD,ActiveMQ Artemis 2.7.0
只有代理重启有帮助
分页时预计性能会下降。这是因为消息被分页到磁盘和从磁盘分页,而不是直接从 RAM 访问。即使是最快的磁盘也比 RAM 慢得多,因此分页会降低性能。
有几种方法可以缓解这种性能下降:
- 为代理的 JVM 提供足够的堆 space 以便永远不会发生分页。
- 使用 flow-control 防止消息在代理上过度堆积导致分页。
- 确保消息消费跟上消息生产,以防止消息在代理上过度堆积导致分页(例如添加更多消费者、提高现有消费者的性能等)。
- 使用高速SSDs instead of slower traditional HDD秒。
我的猜测是您使用的大部分是非持久消息,因此重新启动代理会清除这些消息并消除寻呼的需要,从而恢复正常性能。
此外,由于您使用的是 ActiveMQ Artemis 2.7.0,我强烈建议您升级到 latest release。自 2.7.0 发布以来已经过去了 2 年多,并且在以后的版本中修复了许多错误并实现了新功能。