On Tue, Mar 12, 2024 at 5:55 PM <john.e.gr...@wellsfargo.com.invalid> wrote: > > All, > > > > -----Original Message----- > > From: Christopher Schultz <ch...@christopherschultz.net> > > Sent: Tuesday, March 12, 2024 8:31 AM > > To: users@tomcat.apache.org > > Subject: Re: When does Tomcat add and remove threads? > > > > John, > > > > On 3/11/24 18:14, john.e.gr...@wellsfargo.com.INVALID wrote: > > > From: Christopher Schultz <ch...@christopherschultz.net> > > > Sent: Monday, March 11, 2024 5:09 PM > > > > > >> On 3/11/24 17:47, john.e.gr...@wellsfargo.com.INVALID wrote: > > >>> I am using Tomcat 9.x. > > >>> > > >>> When does Tomcat add and remove threads from its internal thread > > >>> pool? I'm talking about the threads with names like > > >>> http-nio-8080-exec-1. It appears the thread pool is Tomcat's own > > >>> ThreadPoolExecutor but I don't see the exact behavior documented. > > >>> I'm familiar with how java.util.concurrent does it, but it looks > > >>> like Tomcat's version is a little different. > > >> > > >> Are you looking for a technical explanation with code references, or > > >> a plain-English description of when threads are created and added? > > > > Mostly plain English like the j.u.c. ThreadPoolExecutor Java doc has. > > > What happens when all core threads are in use? When do tasks go on > > > the queue? When does core thread + 1 get added? When do threads get > > > removed? > > Tomcat will create thread pools under two separate circumstances. They are > > related, but behave somewhat differently. > > > > First, if you declare an <Executor> in your server.xml, then a thread pool > > will be > > created. You can control the number of threads and their retention policy > > such > > as "keep X spare threads around" and "retire threads after N seconds without > > being used." > > > > Second, if you declare a <Connector> without specifying an "executor", a > > thread pool will be configured for you but you don't really have control > > over it > > because all those nice configuration options for an <Executor> are not > > available > > on the <Connector>. If you want to control those settings, use a <Connector> > > linked with an <Executor>. To be clear, if you declare a <Connector> > > without an > > "executor" attribute, your thread pool will be of a fixed size and threads > > will > > never be released. (I think the thread pool starts small and grows but will > > never shrink.) > > > > An <Executor> is implemented in the StandardThreadExecutor and > > ThreadPoolExecutor classes, which I believe were adaptations of classes from > > java.util.concurrent introduced into Tomcat before java.util.concurrent was > > actually available -- which is why it wasn't used directly in Tomcat. (NB: > > The > > ThreadPoolExecutor class in Tomcat contains an "@author Doug Lea" tag. The > > Tomcat source is licensed under AL2, the JDK source is licensed under GPL2, > > but the original was released by Doug Lea into the public domain under a CC0 > > 1.0 Deed license.) > > > > The re-sizing occurs in the ThreadPoolExecutor class if you'd like to read > > it. It is > > not entirely straightforward. You could start by reading the code for the > > runWorker(Worker w) method where, at the end, processWorkerExit is called. > > > > But since Tomcat's ThreadPoolExecutor is basically Java's > > ThreadPoolExecutor, > > they work the same. > > > > -chris > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > > For additional commands, e-mail: users-h...@tomcat.apache.org > > I took matters in to my own hands and wrote a test to see what was happening. > > Unlike java.util.concurrent.ThreadPoolExecutor, Tomcat's TPE adds threads > when all core threads are busy. It only adds tasks to the queue when max > threads are busy. I prefer this behavior to the JDK behavior. > > Threads are removed when idle for 60 seconds. This appears to be hard-coded > in AbstreactEndpoint.createExecutor().
I have added configuration for that, since this was not right. Rémy --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org