After a Period of Extended Use the Evictor Goes Into an Infinite Loop
(Doc ID 436388.1)
Last updated on FEBRUARY 25, 2020
Applies to:Berkeley DB Java Edition - Version 3.2.23 and later
Information in this document applies to any platform.
After running a multithreaded JE application for a long period of time the application hangs and the threads are blocked waiting for one that is writing to the database. The stack trace of the thread that is trying to write to the database should look like this:
at com.sleepycat.je.evictor.Evictor.doEvict(Evictor.java:247) - locked <0x983c18b0> (a com.sleepycat.je.evictor.Evictor) at com.sleepycat.je.evictor.Evictor.doCriticalEviction(Evictor.java:273) at com.sleepycat.je.dbi.CursorImpl.close(CursorImpl.java:669) at com.sleepycat.je.Cursor.close(Cursor.java:249) - locked <0x98785bf0> (a com.sleepycat.je.Cursor) at com.sleepycat.je.Database.putInternal(Database.java:666) at com.sleepycat.je.Database.put(Database.java:608)
You can attach a debugger at this point and step it back and forth between lines 245 and 247 in the Evictor code. If you observe that the code never passes this loop then you’re affected by this problem in the Cleaner thread. A complete stack trace of the thread doing the put could look like this:
To view full details, sign in with your My Oracle Support account.
Don't have a My Oracle Support account? Click to get started!
In this Document