I'm running tomcat 6.0.18 on Ubuntu 8.10.  I have a comet application
that maintains an open connection with tomcat.  If I re-start my
webapp and then close the client connection, tomcat goes into a loop
and chews up all cpu.  This server is not live and only has my single
client.

The ClientPoller thread consumes most of the cpu running through the
following stack over and over.

Daemon Thread [http-80-ClientPoller] (Suspended (breakpoint at line
654 in ThreadPoolExecutor))
        ThreadPoolExecutor.execute(Runnable) line: 654  
        NioEndpoint.processSocket(NioChannel, SocketStatus, boolean) line: 1161 
        NioEndpoint.processSocket(NioChannel, SocketStatus) line: 1148  
        NioEndpoint$Poller.processKey(SelectionKey,
NioEndpoint$KeyAttachment) line: 1555
        NioEndpoint$Poller.run() line: 1508     
        Thread.run() line: 619  

This is not a problem with my CometProcessor not handling the comet
events; the END event when the client connection is closed is never
delivered to my CometProcessor, understandably since I just re-started
the webapp and there is now a new CometProcessor instance.

I believe what is happening is that the NIO connector is trying to
deliver the END event to a CometProcessor that no longer exists and
just keeps trying.  Should the NIO connector recognize that the event
is undeliverable and give up?  Or is there something I need to do in
webapp shutdown code to tell the NIO processor to disregard any open
connections?

The workaround is to always re-start the tomcat instead of just the
webapp.  This is possible for me since my server is only serving a
single webapp.

Peter

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

Reply via email to