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

Reply via email to