You should call timer.cancel() on context stop. You can do this from a 
ServletContextListener.

Ronald.


Op woensdag, 27 oktober 2010 22:10 schreef Leon Rosenberg 
<rosenberg.l...@gmail.com>:

Hello,

I'm getting following warning with 6.0.29,

after shutdown:
SEVERE: The web application [/moskitodemo] appears to have started a
thread named [MoskitoMemoryPoolReader] but has failed to stop it. This
is very likely to create a memory leak.

here's the snapshot of the code that starts the thread:


public class BuiltInMemoryPoolProducer implements IStatsProducer{

    /**
     * Timer instance for this producer type.
     */
    private static final Timer timer = new Timer("MoskitoMemoryPoolReader", 
true);

...

    public BuiltInMemoryPoolProducer(MemoryPoolMXBean aPool){

        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                readMemory();
            }
        }, 0, 1000L*60);
...}

to my knowledge this thread is a daemon. This knowledge is also shared
by jstack:


"MoskitoMemoryPoolReader" daemon prio=5 tid=10883f800 nid=0x11a9b2000
in Object.wait() [11a9b1000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <10a1120d0> (a java.util.TaskQueue)
    at java.util.TimerThread.mainLoop(Timer.java:509)
    - locked <10a1120d0> (a java.util.TaskQueue)
    at java.util.TimerThread.run(Timer.java:462)

So, how can I avoid this warning and where's the bug.

regards
Leon

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org






Reply via email to