正如最近的一些邮件列表电子邮件和从Google返回的许多信息所表明的那样,ActiveMQ的SystemUsage尤其是MemoryUsage功能使一些人感到困惑。 我将尝试解释有关MemoryUsage的一些细节,这些细节可能有助于理解它的工作方式。 我将不介绍StoreUsage和TempUsage,因为我的同事已经深入 介绍了这些内容 。
您可以使用activemq.xml配置的一部分来指定SystemUsage限制,特别是围绕代理可以使用的内存,持久性存储和临时存储。 这是ActiveMQ 5.7附带的默认示例:
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="64 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
内存使用情况
MemoryUsage似乎引起了最大的混乱,因此我在这里尝试阐明其内部工作原理。
当消息传入经纪人时,它必须走到某个地方。 它首先被解组断丝进入类型的ActiveMQ的命令对象ActiveMQMessage
。 目前,该对象显然已在内存中,但代理程序并未对其进行跟踪。
这使我们到达了第一点。
MemoryUsage实际上只是代理所需的字节数计数器,用于跟踪消息正在使用的JVM内存量。 这为经纪人提供了一些监控和确保我们不会超出极限的方法(稍后会详细介绍)。 否则,在JVM耗尽堆空间之前,我们可能会在