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.