I have a question about the threads that Tomcat uses for servicing requests.
My environment is Tomcat 7.0.55 running on Linux (CentOS 6.5) with Oracle JVM
1.7.0_79.
My question is specifically about the threads that Tomcat uses for servicing
requests which are named ‘http-bio-{port}-exec-###’, as revealed by
Thread.getName(). I have — for better or worse — written a servlet that caches
some information using ThreadLocal[.set()][.get()] for performance. This
mostly works very well, except that the number of threads in Tomcat’s Execution
pool seem to change, with old threads going away, and new ones being created,
and I have a need to know when any of these threads go away, so that I can
perform some clean-up.
I am not asking about maxThreads, minThreads, etc., and I get how to configure
the number of threads in the pool. However, if I configure a particular pool
size to say 50, I will see in the Tomcat Manager / Status page that the pool
never goes above 50 (and current threads is usually much lower). When the
threads start out, they will begin as:
http-bio-{port}-exec-1
http-bio-{port}-exec-2
http-bio-{port}-exec-3
… etc …
However, if I leave the server running, they will eventually become:
http-bio-{port}-exec-101
http-bio-{port}-exec-102
http-bio-{port}-exec-103
… etc …
even though there are always less than 50 threads at any given time.
So my question is whether there is any way to tell when one of the threads is
stopped (removed from the queue?) by Tomcat, and if I can hook any code to
execute before it does? My goal is to be able to tell when a thread is about
to be killed so that I can do some clean-up.
Or is the answer dotn’s ThreadLocal for anything that needs clean-up, as there
is no way to tell when Tomcat is going to stop (remove?) a thread from its
queue?
Extra credit question: when does Tomcat decided to kill a thread, since
although understand that would happen when the queue size expands and
collapses, on my development server I doubt I’m ever going beyond minThreads.
Does each thread only handle a fixed number of requests before it terminates,
perhaps to prevent memory leaks?
I am hoping that this is the best place to ask this question. I have tried
searching the ‘Net, and couldn’t find anything, although I acknowledge that
perhaps I am asking something that is just not possible.
Thanks in advance to anyone who can shed any light on this. And I do know how
to hook a servlet being shut down, which is not what I am asking.
Regards,
Dave.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]