2015-10-13 150 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