java - Apache Artemis 如何管理堆空间 (RAM)

标签 java activemq-artemis

在我们的项目中,我们使用两个队列,一个用于正常处理,另一个用于错误处理。 “错误”队列有时会充满“错误”消息,这些消息一直呆在那里,直到有人检查它们。在某些情况下,“错误”队列会填满大量消息,然后 JVM 就会耗尽堆。

例如,目前,JVM 配置了最大 4GB 堆,并且会随机出现 OOM 异常。我们使用了 MemoryAnalyzer 和 IBM Heap Analyzer,两者都有点类似于 Artemis。当我检查文件系统上日志的大小时,它大约是5GB。

我们发送:

  • 小消息
  • 坚持不懈
  • 不使用 Netty 或远程处理(仅使用 Artemis 进行异步 处理)

所以,我的问题是关于 Apache Artemis 堆管理和建议:

  1. 它是否也会将持久消息存储在 RAM 中,即使它们已经存储在文件系统上?
  2. 如果#1为真,控制/限制Artemis分配的RAM量的策略是什么?

感谢任何帮助!

最佳答案

对于对此主题感兴趣的人,Artemis 论坛上提供了答案: http://activemq.2283324.n4.nabble.com/How-does-Apache-Artemis-manage-heap-space-RAM-tt4723220.html

关于java - Apache Artemis 如何管理堆空间 (RAM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497606/

相关文章:

java - 当 REST API 在 Retrofit2 RxJava 中返回 401 时刷新访问 token

java - 替换类路径中的 jar 后出现 ClassNotFoundException

java - 如何从txt中读取行?

java - 智能转换为 'ObserverT!!' 是不可能的,因为 'item.get()' 是一个复杂的表达式

java - Maven 依赖 Netty - NoSuchMethodError

spring-boot - (ActiveMQ-客户端-netty-线程)] org.apache.catalina.loader.Weba................. : this web application instance has been stopped already

java - 消息监听器不起作用?

java - 在单个程序中制作多个帧

docker - 无法从 docker 修改容器中的文件

stomp - ApacheMQ Artemis 保留没有路由的消息