Hi BharatKumar,
In your application have 346 WAITING threads, 338 of them have the below stacktrace:
java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x0000000741c903b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
Basically these threads are doing nothing. They are just waiting for new jobs to come. You don't need these many WAITING state threads, as threads occupy memory.
All these 338 WAITING threads are originated from the 'GticsAsync' thread pool. You may want to lower the 'min' thread pool size of this thread pool. It has potential to lower the WAITING state thread count in your overall application
Edit your Comment