在我们的项目中,我们使用两个队列,一个用于正常处理,另一个用于错误。 “错误”队列有时会充满“错误”消息,这些消息一直坐在那里,直到有人将其检出为止。在某些情况下,“错误”队列填充了许多消息,然后JVM用完了堆。

例如,当前,JVM配置有最大4GB的堆,并在随机时间获得OOM异常。我们使用了MemoryAnalyzer和IBM Heap Analyzer,两者都指向了Artemis。当我检查文件系统上日志的大小时,它约为5GB。

我们发送:


小讯息
持久的
不使用Netty或远程处理(只需将Artemis用于异步
处理中)


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


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


感谢任何帮助!

最佳答案

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

09-26 20:59