将WSO2ESB与Websphere MQ JMS传输一起使用,出于性能原因,我们必须在一天内增加并发队列侦听器的数量。但是这样的改变导致了内存消耗问题,这出乎意料地似乎非常依赖于并发JMS线程的数量。
下面是jvisualvm图表,它们显示处理相同大型消息(最多100M)时堆的状态,只有听众数量的差异:第一种情况下为1,第二种情况下为32次。
任何暗示都会受到赞赏。
答案 0 :(得分:0)
必须为每个客户端预先分配接收缓冲区。它也可能有一个预先分配的发送缓冲区,我不确定。我正在研究MQ原则,而不是我不太了解的实现。无论如何,我认为这是你在这里主要看到的。您可以改变缓冲区大小来计算出来。请注意,这与邮件大小不同。这是总队列大小。任何MQ都必须有一个大缓冲区,即使它将一些消息循环到磁盘。
您可能还会发现某些ram分配用于工作单元聊天,以及由多个客户端产生的其他内务管理。
说到UoW,我当然希望您已将异步问题考虑在可能涉及多客户端解决方案的任何事务中。一个主要适用于我的书的答案是一个糟糕的答案。你应该努力证明你的异步解决方案不能崩溃。因为在6个月内,如果它下降,你将有一段时间记住,你可以在你的架构中的这个小地方。您将队列放入以保持同步。你在做什么可能会玩火。小心。