Culprit: all threads in the pool are blocked in wait(), lock() or …
Culprit: bounded queue is full. Sometimes the thread that adds task to the queue is blocked while doing that.
Culprit: in some systems, there’s a single task dispatcher thread like swing EDT. That thread can sometimes get stuck
Suggestion: dynamically turn on verbose logging in the messaging module within the engine, so it always logs something to indicate activity. It’s like the flashing LED in your router. You can turn on such logging by JMX.
Suggestion: for tibrv, you can easily start a windows tibrv listener on the same subject as the listener inside the trading engine. This can reveal activity on the subject