java - Apache ActiveMQ Artemis 减速
问题描述
有时在重负载下,我们可以观察到发送 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);
解决方案
首先想到的是,由于journal-pool-files
默认为-1
和journal-file-size
默认10485760
字节(即 10MB),代理必须在运行时随着消息的累积创建和初始化 10MB 的文件,一旦这些文件被创建,日志将不会缩小到更小的一组文件作为消息被消费。创建和初始化文件是一项昂贵的操作,因此您应该调整日志,以便预先创建足够的文件来处理预期的消息量。有关更多详细信息,请参阅期刊上的 Apache Artemis 文档。
推荐阅读
- javascript - HTTP POST 请求适用于 Postman,但不适用于我的 Web 应用程序的 JavaScript 提取
- angular - 使用 ng-packagr 制作 Angular mono-repo 库
- python - 无法在 KIVY Python 中打印取自 kivy.uix.textinput.TextInput 的文本
- javascript - 选择具有相同属性 data-img_key="bull3" 的所有行
- excel - 无法在 Excel 中断开链接 - VBA
- visual-studio-code - 当我在 VS 代码终端中执行“~/.zshrc”时,我得到“权限被拒绝”。什么是好的解决方案?
- google-sheets - 动态使用多个 SUBSTITUTE 函数
- jquery - 未捕获的 ReferenceError: ajaxPost 未在 HTMLButtonElement.onclick 中定义
- python - 如何连接到需要 MFA 的 SQL Server 而无需在单独的窗口中提供密码
- reactjs - 如何使用自定义钩子>