I am currently facing issue that the system threads is getting increased at an alarming rate and too many threads are in WAITING state,
“NonStopCache [SoftwareAG.IS.Core.AMSDEV] Executor Thread-54 for ‘HTTP Handler 127.0.0.1’” Id=70855 in WAITING
at java.lang.Object.wait(Native Method)
- waiting on <0x3794b1fa> (a net.sf.ehcache.constructs.nonstop.NonstopThreadPool$Worker)
at java.lang.Object.wait(Object.java:503)
at net.sf.ehcache.constructs.nonstop.NonstopThreadPool$Worker.waitUntilTaskAvailable(NonstopThreadPool.java:276)
at net.sf.ehcache.constructs.nonstop.NonstopThreadPool$Worker.run(NonstopThreadPool.java:231)
at java.lang.Thread.run(Thread.java:724)
“Service Thread Pool” Id=70810 in WAITING
at java.lang.Object.wait(Native Method)
- waiting on <0x6153e7d5> (a com.wm.app.b2b.server.TMPooledThread)
at java.lang.Object.wait(Object.java:503)
at com.wm.util.pool.PooledThread.run(PooledThread.java:110)
at java.lang.Thread.run(Thread.java:724)
Please find the statistics below for the system threads.
Current Peak Limit
Total Sessions 4 16 -
Licensed Sessions 0 6 2147483647
Stateful Sessions 0 5 2147483647
Service Instances 5 37 -
Service Threads 3 9 -
System Threads 551 555 -
Below is the JVM memory settings for the IS,
set JAVA_MIN_MEM=2048M
set JAVA_MAX_MEM=2048M
set JAVA_MAX_PERM_SIZE=512M
Please find the server thread pool info also,
Available Threads 97 % (772 Threads)
Maximum Threads 800
Minimum Threads 50
Available Threads Warning Threshold 15 % (120 Threads)
Scheduler Thread Throttle 75 % (600 Threads)
Scheduler Current Threads 0
My question to the team is why the threads are staying in WAITING state instead of getting released.
Also we are seeing the below GC related message in the ehcache logs
Recent versions of Ehcache (starting with 3.7, I think), which is used by Integration Server, require a lot of threads. As you’ve noticed, the threads are generally in a WAITING state. Several IS users have expressed concern about this, but it hasn’t caused any problems. These are system threads, so they do not come out of IS’s thread pool. A thread is a very lightweight object, so the presence of lots of threads do not necessarily indicate a problem.
To verify that this increase in threads is due to Ehcache, you will need to take a thread dump and look for threads with net.sf.ehcache classes in their stack frames. If you see lots of those, that confirms it.
We also noticed that there where way more threads on a 9.5 installation in comparison with a 7.1.3 installation
We asked software ag about it and this was there anser:
The thread count that you are seeing at the IS Admin Console → System Threads is currently active threads those are ready for use. It doesn’t mean that all of those threads are in use and processing Tasks. This count reflects top-level services only. Child services use the same thread that their top-level service uses. This count does not include services that are running from the wm.server. folder of the WmRoot package. May be your Integration Server has assigned 3 threads for it’s internal use. But I can see some of the System threads are single.
Even I have a clean install of Integration Server in my local desk and I can see around 200 threads are in active and ready for use.
For Example, If you can see that there are many “NonStopCache” threads. Regarding the NonStopCache threads, I can see these threads are being consumed by the following cache managers of ehcache.
these threads are not harmful and are being used by ehcache for some internal operations.
The Service Thread Pool size is not harmful and is expected, though there is no load at the time of taking the thread dump, I don’t think this will make any slowness in operation.
And also, LinkReaderThreads. Number of LinkReader, Broker Status, Broker Connection Keep-alive threads is as expected. So, in stable state conditions, whether system is idle or processing, we can expect few Broker Status threads, Keep-alive, and LinkReader threads. This number may go up or down if connections are broken, or a broker is not reachable, or new Broker JMS connections are getting created. It’s an expected behavior.
One small thing to keep in mind when you upgrate to a new version. You will have to add more memory due to the extra “WAITING” threads (every thread uses a amount of memory)
Sizing is not the same between old versions (before 9.x) and the current 9 versions.