AnsweredAssumed Answered

Native MQ Performance

Question asked by thanawan.sachdev on Feb 14, 2017
Latest reply on May 17, 2017 by Stephen_Hughes

Hi, 

 

Our client's main service comes from IBM Native MQ. However, during load test test we observe that we stuck at a certain throughput of around 100 TPS. Investigating further we saw that "Back-end response time" is actually steady - approximately 5-10ms. However, "Front-End response time" increases even though both Gateway and MQ is not heavily loaded.

 

Thread dumps at Gateway shows blocking thread:

 

   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:502)
        at com.ibm.mq.jmqi.remote.util.ReentrantMutex.acquire(ReentrantMutex.java:167)
        - locked <0x0000000449822ce8> (a com.ibm.mq.jmqi.remote.api.RemoteHconn$CallLock)
        at com.ibm.mq.jmqi.remote.util.ReentrantMutex.acquire(ReentrantMutex.java:73)
        - locked <0x0000000449822ce8> (a com.ibm.mq.jmqi.remote.api.RemoteHconn$CallLock)
        at com.ibm.mq.jmqi.remote.api.RemoteHconn.enterCall(RemoteHconn.java:2121)
        at com.ibm.mq.jmqi.remote.api.RemoteHconn.enterCall(RemoteHconn.java:2080)
        at com.ibm.mq.jmqi.remote.api.RemoteHconn.enterCall(RemoteHconn.java:2049)
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.spiOpen(RemoteFAP.java:5948)
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.spiOpen(RemoteFAP.java:5822)
        at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.spiOpen(InterceptedJmqiImpl.java:548)
        at com.ibm.mq.ese.jmqi.ESEJMQI.spiOpen(ESEJMQI.java:847)
        at com.ibm.mq.MQDestination.open(MQDestination.java:312)
        at com.ibm.mq.MQQueue.(MQQueue.java:236)
        at com.ibm.mq.MQQueueManager.accessQueue(MQQueueManager.java:2674)

 

While there are many threads waiting for blocked thread above:

 

   java.lang.Thread.State: BLOCKED (on object monitor)
        at com.ibm.mq.MQQueueManager.accessQueue(MQQueueManager.java:2696)
        - waiting to lock <0x0000000449821390> (a com.ibm.mq.MQQueueManager)
        at com.l7tech.external.assertions.mqnative.server.ae.doWork(Unknown Source)
        at com.l7tech.external.assertions.mqnative.server.MqNativeResourceManager.a(Unknown Source)
        at com.l7tech.external.assertions.mqnative.server.ServerMqNativeRoutingAssertion.checkRequest(Unknown Source)
        at com.l7tech.server.policy.assertion.composite.ServerCompositeAssertion.iterateChildren(Unknown Source)
        at com.l7tech.server.policy.assertion.composite.ServerOneOrMoreAssertion.checkRequest(Unknown Source)
        at com.l7tech.server.policy.assertion.composite.ServerCompositeAssertion.iterateChildren(Unknown Source)
        at com.l7tech.server.policy.assertion.composite.ServerAllAssertion.checkRequest(Unknown Source)
        at com.l7tech.server.policy.ServerPolicy.checkRequest(Unknown Source)
        at com.l7tech.server.policy.w.call(Unknown Source)
        at com.l7tech.server.policy.w.call(Unknown Source)

 

Looked through and tried to set io.mqConnectionCacheMaxSize and mq.listenerThreadLimit but it makes no difference at all. Appreciate any tips on this.

Attachments

Outcomes