WSO2中并发MQ JMS侦听器的异常内存消耗

WSO2中并发MQ JMS侦听器的异常内存消耗,jms,wso2,wso2esb,ibm-mq,Jms,Wso2,Wso2esb,Ibm Mq,由于性能原因,将WSO2ESB与Websphere MQ JMS传输结合使用,我们不得不每天增加并发队列侦听器的数量。但是这种变化导致了内存消耗问题,这出乎意料地似乎非常依赖于并发JMS线程的数量 下面是jvisualvm图表,它显示了在处理相同的大消息(最多100M)时堆的状态,唯一的区别是侦听器的数量:第一种情况下为1个,第二种情况下为32个 任何提示都将不胜感激。必须为每个客户端预先分配接收缓冲区。它可能也有一个预先分配的发送缓冲区,我不确定。我将遵循MQ原则,而不是我不太熟悉的这个实

由于性能原因,将WSO2ESB与Websphere MQ JMS传输结合使用,我们不得不每天增加并发队列侦听器的数量。但是这种变化导致了内存消耗问题,这出乎意料地似乎非常依赖于并发JMS线程的数量

下面是jvisualvm图表,它显示了在处理相同的大消息(最多100M)时堆的状态,唯一的区别是侦听器的数量:第一种情况下为1个,第二种情况下为32个


任何提示都将不胜感激。

必须为每个客户端预先分配接收缓冲区。它可能也有一个预先分配的发送缓冲区,我不确定。我将遵循MQ原则,而不是我不太熟悉的这个实现。无论如何,我认为这就是你们在这里主要看到的。您可以改变缓冲区大小来确定它。请注意,这与消息大小不同。这是队列的总大小。任何MQ都必须有一个大的缓冲区,即使它将一些消息循环到磁盘

您可能还会发现,一些ram分配是针对工作单元聊天,以及来自多个客户机的其他内务管理

说到UoW,我当然希望您已经考虑到多客户机解决方案中可能涉及的任何事务的异步问题。一个在我的书中最有效的答案是一个糟糕的答案。您应该努力证明您的异步解决方案不会崩溃。因为在6个月内,如果它倒下,你会有一个地狱般的时间记住,这是可能的,在这个小地方,在您的架构。您将队列放入以保持同步。你所做的可能是玩火。小心点