【问题标题】:Apache ActiveMQ Artemis slowdownApache ActiveMQ Artemis 减速
【发布时间】:2019-02-22 07:23:42
【问题描述】:

在负载过重的情况下,我们有时会观察到发送 JMS 消息的速度变慢。有时发送一条简单的消息可能需要长达 30 秒。我们注意到的第一件事是巨大的日志文件,总共 9.5GB。为什么有这么多文件,有没有影响文件数量的设置。根据文档:

Apache ActiveMQ Artemis 有一个复杂的文件垃圾收集算法,可以确定是否需要某个特定的日志文件 - 即是否删除了相同或其他文件中的所有数据。如果是这样,该文件可以被回收和重新使用

但是我们在 journals 文件夹中看到了很多文件。会影响发送消息的性能吗?

更新

我们使用的是嵌入式 JMS 服务器版本 2.3.0。以下是我们设置的一些配置:

config.setPersistenceEnabled(true);
config.getAcceptorConfigurations().add(new TransportConfiguration(InVMAcceptorFactory.class.getName()));
config.getConnectorConfigurations().put("connector", new TransportConfiguration(InVMConnectorFactory.class.getName()));
AddressSettings addressSettings = new AddressSettings();
    addressSettings.setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE);
    addressSettings.setMaxSizeBytes(30 * 1024 * 1024L);
    addressSettings.setPageSizeBytes(10 * 1024 * 1024L);
    addressSettings.setPageCacheMaxSize(20);
    config.getAddressesSettings().put("jms.queue.*", addressSettings);
    config.setJournalBufferSize_AIO(819200);
    config.setJournalBufferSize_NIO(819200);

【问题讨论】:

  • 您能提供完整的 broker.xml 吗?您使用的是哪个版本的 Artemis?
  • @JustinBertram 我已经用版本和设置更新了问题

标签: java jms activemq-artemis


【解决方案1】:

首先想到的是,由于 journal-pool-files 默认为 -1journal-file-size 默认为 10485760 字节(即 10MB),代理必须在运行时创建和初始化 10MB 的文件,因为消息积累,并且一旦创建了这些文件,日志将不会随着消息的消耗而缩回到较小的文件集。创建和初始化文件是一项昂贵的操作,因此您应该调整日志,以便预先创建足够的文件来处理预期的消息量。有关详细信息,请参阅Apache Artemis documentation on the journal

【讨论】:

  • 是否有可能是代理正在耗尽线程而传入的消息只是在等待下一个线程可用?
  • 我想这在理论上是可能的,但考虑到非阻塞架构似乎不太可能。
猜你喜欢
  • 2020-10-09
  • 1970-01-01
  • 2019-01-21
  • 2019-09-30
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
相关资源
最近更新 更多