You have many threads that are not part of Tomcat, as Chuck mentions. Whatever you start in the webapp you have to close as well. You can close via a shutdown listener (Context listener), or if you use something like Spring which already has built in shutdown hook, implement their shutdown interface or register a callback. When you shutdown a java executor (which can be seen in the thread dump), notice that to be safe you can do a two steps shutdown. Step 1 does a graceful shutdown and waits. When the graceful shutdown times out and the pool has not finishes, step 2, “hard” shutdown to finish quickly. This will give you the benefit of finishing pending tasks and limit the amount of time allowed before you kill the pool. A hard shut down also means that tasks that are still waiting in the pool will not be executed, so use with caution.
This also goes for everything that you create that potentially has persistent resource usage, such as connection pools, HttpClient, etc. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org