If somewhere in the call chain there is an unbounded thread pool (for example threads are created per request) the ThreadlocalPool will keep on instantiating new instances. It is designed to keep one instance per thread.
You need to identify which piece of code is executed by the unbounded thread pool and use a StrictMaxPool there.