You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2004/10/25 23:32:09 UTC

DO NOT REPLY [Bug 31886] New: - Tomcat hangs under heavy load using JDBCStore

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=31886>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=31886

Tomcat hangs under heavy load using JDBCStore

           Summary: Tomcat hangs under heavy load using JDBCStore
           Product: Tomcat 4
           Version: 4.1.30
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: Catalina
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: tom@squeat.com


We have a pretty heavily loaded website that periodically (1 or 2 times a day) hangs (stops servicing 
requests) with the following stack trace:

java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:782)
        at java.util.HashMap$EntryIterator.next(HashMap.java:824)
        at java.util.HashMap.writeObject(HashMap.java:976)
        at sun.reflect.GeneratedMethodAccessor133.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
        at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1429)
        at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:852)
        at org.apache.catalina.session.JDBCStore.save(JDBCStore.java:690)
        at org.apache.catalina.session.PersistentManagerBase.writeSession(PersistentManagerBase.java:
739)
        at 
org.apache.catalina.session.PersistentManagerBase.processMaxIdleBackups(PersistentManagerBase.java
:1063)
        at 
org.apache.catalina.session.PersistentManagerBase.processPersistenceChecks(PersistentManagerBase.ja
va:477)
        at org.apache.catalina.session.PersistentManagerBase.run(PersistentManagerBase.java:1141)
        at java.lang.Thread.run(Thread.java:534)

Here are a couple ways this could be fixed:

1. catch the ConcurrentModificationException in JDBCStore.save()
2. catch Exception in PersistentManagerBase.run()

I don't believe this is will be a problem with Tomcat 5 because ContainerBase.backgroundProcess() 
catches Exception.   But I haven't tested this in Tomcat 5 yet (soon I hope).

Note: I am currently running Tomcat 4.1.31 but I know we had this problem with earlier versions 
(4.1.24).   I have worked around it before and will do so again by making my own custom build but it 
would be nice to get this one fixed.

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org