We have a java application deployed in Weblogic where MDB connects to TIBCO EMS. There are 3 queues in TIBCO as in queues for Weblogic and 3 as out queues. Weblogic JVM creates 32 consumers (for each in queues) at the time of start up and listens to the queue. In TIBCO EMS queue prefetch value is 5. After receiving the message weblogic connects to Oracle DB to process and write response to TIBCO EMS out queue.
We have 2 standalone servers each with 4 JVMs, each having 32 consumers connected to in queues.
There is a custom workmanager introduced with Min and max thread constraint as 32.
On a high volume day, when transaction reaches around 400 tps, messages starts to pile up in TIBCO EMS queue.
What should be the reason of pile up? How many Poller thread will be there working at a time? How to calculate for this tps, what should be my JVM and consumer count.
It works in normal volume, high volume it starts to pile up
Latest Update: We have identified that while writing the response to TIBCO OUT queue, application is doing JNDI lookup. JNDI lookup time increases along with transaction volume. For each response application does JNDI lookup, create connection and close connection.
Question:
- Why it takes time to do lookup? Anyway to reduce the time? (what is the bottleneck? CPU, memory? Weblogic or TIBCO?)
- Can we avoid JNDI lookup for foreign queue?
- Any other way to handle this?