在我们的项目中,我们使用两个队列,一个用于正常处理,另一个用于错误。"错误"队列有时会填充"错误"消息,这些消息坐在那里,直到人类检查它们为止。在某些情况下,"错误"队列充满了很多消息,然后JVM用尽了堆。
例如,当前,使用Max 4GB堆配置的JVM,并随机获得OOM异常。我们使用了存储室分析仪以及IBM Heap Analyzer,并且都指向Artemis。当我在文件系统上检查日记帐的大小时,大约是5GB。
我们发送:
- 小消息
- 持久性
- 不使用Netty或远程(只使用Artemis作为异步处理)
所以,我的问题是关于Apache Artemis Heap管理和建议:
- 即使已经存储在文件系统上,它是否也将持久消息存储在RAM中?
- 如果#1是正确的,则控制/限制ARTEMIS分配/限制金额的策略是什么?
感谢任何帮助!
对于那些对此主题感兴趣的人,答案是在Artemis论坛上提供的:http://activemq.2283324.n4.n4.nabble.com/how-does-apache-artemis-manage-manage-heap-space-space-ram-tt4723220.html