Java 将消息存储在内存上,而不是JVM-ActiveMQ

Java 将消息存储在内存上,而不是JVM-ActiveMQ,java,php,out-of-memory,activemq,stomp,Java,Php,Out Of Memory,Activemq,Stomp,我正在使用ActiveMQ,其中生产者使用PHP,消费者使用JAVA。我正在使用STOMP将PHP连接到AMQ。 总共发送了10000条消息。 考虑java订阅服务器宕机的情况,即没有可用的用户来消费消息。 在本地系统上尝试这种情况时,在3000条消息之后,ActiveMQ抛出Java.memoryoutofBond异常 因此,我想到了一些解决方案: 1.ActiveMQ是否有任何方法可以将消息存储在服务器上而不是存储在内存中? 2.我可以尝试任何系统调整(已经尝试将Java堆大小增加到3GB,

我正在使用ActiveMQ,其中生产者使用PHP,消费者使用JAVA。我正在使用STOMP将PHP连接到AMQ。 总共发送了10000条消息。 考虑java订阅服务器宕机的情况,即没有可用的用户来消费消息。 在本地系统上尝试这种情况时,在3000条消息之后,ActiveMQ抛出Java.memoryoutofBond异常

因此,我想到了一些解决方案: 1.ActiveMQ是否有任何方法可以将消息存储在服务器上而不是存储在内存中? 2.我可以尝试任何系统调整(已经尝试将Java堆大小增加到3GB,我可以发送9000条消息,但在相同的错误之后),任何可以启用或禁用的ActiveMQ选项都有帮助。
3.有没有比我想到的更好的解决方案?

查看ActiveMQ文档,您可以使用Kahab buy配置将代理切换到持久化

<broker brokerName="broker" ... >
 <persistenceAdapter>
  <kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
 </persistenceAdapter>
 ...
</broker>

...
根据您的场景,您可以应用许多选项进行调整,请查看


已尝试使用此功能。。。使用了诸如-maxAsyncJobs、增加的indexCacheSize等选项,但仍然面临问题。。。