After debugging this further, I've figured out what's going on here.  I was
calling two methods after committing the response that process some optional
logging to a backend database and submit a record to a queue that later gets
processed by a background thread in batches.  Both of those methods access
the HttpSession to get various peices of information out of it, which
appears to be a problem when using the PersistentManager to store sessions
in a database.  I noticed some errors like this spawing from one of those
methods:

java.lang.IllegalStateException: getAttribute: Session already invalidated
        at
org.apache.catalina.session.StandardSession.getAttribute(StandardSession.jav
a(Compiled Code))
        at
org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessi
onFacade.java(Compiled Code))
        at
org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessi
onFacade.java(Compiled Code))
... snip ...

I'm guessing the session was swapped out of memory right after the request
occurred?  Doesn't seem to make sense because I have the swap out set to
happen after 1 minute of inactivity.  This is the best possible explanation
I could come up with for the exceptions though.  Maybe a problem with the
PersistentManager swapping out a session when processing hasn't left the
service() method?

Still, I think there may be a problem with the ErrorDispatcherValve.  It
shouldn't be trying to process an error response after the response has
already been committed should it?  Maybe I'm only seeing this because I've
disabled keep alive connections.

Anyone have any input?  Should I submit something as a bug here?

Thanks,
Mike

-----Original Message-----
From: Mike Cherichetti (Renegade Internet)
[mailto:[EMAIL PROTECTED]
Sent: Friday, September 05, 2003 10:06 AM
To: Tomcat Users
Subject: Bug in ErrorDispatcherValue?


I've had this happen twice in the past two days on two rather busy servers.
Both are running RedHat Linux 7.3, IBM JDK 1.4.1, and Tomcat 4.1 (one is
4.1.24 and the other is 4.1.27).  After these exceptions hit the error log,
Tomcat stops responding:


2003-09-05 06:33:06 ErrorDispatcherValve[www.mysite.com]: Exception
Processing ErrorPage[errorCode=500, location=/error/500.jsp]
java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at
java.net.SocketOutputStream.socketWrite(SocketOutputStream.java(Compiled
Code))
        at
java.net.SocketOutputStream.write(SocketOutputStream.java(Compiled Code))
        at
org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWri
te(InternalOutputBuffer.java(Compiled Code))
        at
org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFi
lter.java(Compiled Code))
        at
org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.j
ava(Compiled Code))
        at
org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java(Compiled
Code))
        at
org.apache.coyote.tomcat4.OutputBuffer.flush(OutputBuffer.java(Compiled
Code))
        at
org.apache.coyote.tomcat4.CoyoteResponse.flushBuffer(CoyoteResponse.java:555
)
        at
org.apache.coyote.tomcat4.CoyoteResponseFacade.flushBuffer(CoyoteResponseFac
ade.java:227)
        at
org.apache.catalina.valves.ErrorDispatcherValve.status(ErrorDispatcherValve.
java(Compiled Code))
        at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java(Compiled Code))
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java(Compiled Code))
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java(Com
piled Code))
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java(Compiled Code))
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compi
led Code))
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled
Code))
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
(Compiled Code))
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java(Compiled Code))
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compi
led Code))
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled
Code))
        at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java(Compiled
Code))
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java(Compil
ed Code))
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java(Compiled Code))
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java(Compil
ed Code))
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a(Compiled Code))
        at java.lang.Thread.run(Thread.java(Compiled Code))


2003-09-04 15:42:54 ErrorDispatcherValve[localhost]: Exception Processing
ErrorPage[errorCode=500, location=/error/500.jsp]
java.lang.IllegalStateException: Cannot reset after response has been
committed
 at org.apache.catalina.connector.ResponseBase.reset(ResponseBase.java:789)
 at
org.apache.catalina.connector.HttpResponseBase.reset(HttpResponseBase.java:8
12)
 at
org.apache.catalina.connector.HttpResponseBase.reset(HttpResponseBase.java:3
73)
 at
org.apache.catalina.valves.ErrorDispatcherValve.custom(ErrorDispatcherValve.
java:413)
 at
org.apache.catalina.valves.ErrorDispatcherValve.status(ErrorDispatcherValve.
java(Compiled Code))
 at
org.apache.catalina.valves.ErrorDispatcherValve.throwable(ErrorDispatcherVal
ve.java:277)
 at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java(Compiled Code))
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java(Compiled Code))
 at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java(Com
piled Code))
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java(Compiled Code))
 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compi
led Code))
 at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled
Code))
 at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
(Compiled Code))
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java(Compiled Code))
 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compi
led Code))
 at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled
Code))
 at
org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java(Compiled
Code))
 at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:585)
 at java.lang.Thread.run(Thread.java:568)


That second exception is probably something that I should fix on my end.
But, I figured I would provide it too since it did cause a lockup too.
Anyone have an input?

Thanks,
Mike




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to