2015-10-13 152 views
0

我们将Javasphere MQ 7.5与Javax-JMS类一起使用,并且存在一些性能问题,这些问题无法重现。缓慢的jms mq消息发送

我已将性能问题隔离到这两个方法调用createSessionsend

这两个调用有时需要大量的时间(每条消息> 300ms)。通常有一个Object.wait呼叫导致放缓。所以也许jms正在等待资源。

有时候我可以发送500条消息而没有发生任何问题,但突然间真的很慢。问题不在我们的代码中,因为之前的每一步都不需要太多时间。只有这两个JMS方法调用。

所以我的问题是,突然性能下降的原因是什么?

是否可以通过使用queuemanager-logs进行调试?

任何想法都有帮助。

编辑

我们使用的客户端绑定和SHARECNV,设置为10

+0

任何机会的耐用主题? – Nicholas

+0

请用以下附加信息更新您的问题;您是否使用客户端绑定(即通过网络连接到队列管理器)或本地绑定;如果是客户端,您是否在托管环境中运行您的应用程序,其中可能存在连接池或共享连接(SVRCONN定义中的SHARECNV设置);在createSession需要很长时间的同时,队列管理器中是否存在任何网络问题? –

+0

@MoragHughson我编辑了我的问题。但我无法回答在我的通话过程中qmgr是否有网络问题。 qmgr中的哪个地方可以检查? – Christian

回答

1

我已经分离出的性能问题,这两个方法,调用 了createSession和发送。

我希望你不会为每个放到队列中的消息做一个createSession方法调用,因为如果你是,那是一个可怕的设计。

执行1个createConnection方法调用和1个createSession方法调用,然后发送所有消息。如果您有多个线程,则使用连接池。

+0

感谢您的回答。但你是对的。目前每个消息发送都有一个createSession。这可能是性能问题的原因吗? – Christian

+0

是的 - 正如罗杰所说,这将是非常糟糕的表现。这就像你的邮差几次在你的车道上走动一样,以便分别传递每个信封,而不是一次走上车道并一次传送所有信封。 –

+0

那么我怎样才能保持会话的活跃?这样做有缺点吗?我们使用messagelistener并等待消息飞入。 – Christian