caffeine: Deadlock in NonReentrantLock
Under heavy load of JVM, we are experiencing deadlocks in caffeine version 2.5.6.
Here is the threaddump of the two threads in deadlock:
"ajp-0.0.0.0-8109-59 (P6V7aMaZbbXkfaYzYzXxID0tvHylFQJumanAAABmA)":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000032a600bb8> (a com.github.benmanes.caffeine.cache.NonReentrantLock$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at com.github.benmanes.caffeine.cache.NonReentrantLock$Sync.lock(NonReentrantLock.java:315)
at com.github.benmanes.caffeine.cache.NonReentrantLock.lock(NonReentrantLock.java:78)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.performCleanUp(BoundedLocalCache.java:1096)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.afterWrite(BoundedLocalCache.java:1017)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:1655)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:1602)
at com.github.benmanes.caffeine.cache.LocalManualCache.put(LocalManualCache.java:64)
and
"ajp-0.0.0.0-8109-78 (-jIkyghhBePEsLll9i5dnGr65Dx8PfahGe2gAABxE)":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000032a600bb8> (a com.github.benmanes.caffeine.cache.NonReentrantLock$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at com.github.benmanes.caffeine.cache.NonReentrantLock$Sync.lock(NonReentrantLock.java:315)
at com.github.benmanes.caffeine.cache.NonReentrantLock.lock(NonReentrantLock.java:78)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.performCleanUp(BoundedLocalCache.java:1096)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.afterWrite(BoundedLocalCache.java:1017)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:1655)
at com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:1602)
at com.github.benmanes.caffeine.cache.LocalManualCache.put(LocalManualCache.java:64)
Looking at the code, I can’t imagine a scenario this could occur, but it does occur under heavy load of our JVMs.
Any ideas what we could do? For now, as a workaround, I’ve added a synchronized() block around the cache.put() methods to make sure only 1 thread is adding new values to the cache at a time.
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 1
- Comments: 104 (47 by maintainers)
Commits related to this issue
- JCache 1.1; Automatic-Module-Name; and other potential fixes Now passes the TCK tests that were backwards incompatible with 1.0. The OSGI test is enabled now that jsr107 includes the bindings. Added... — committed to ben-manes/caffeine by ben-manes 7 years ago
- JCache 1.1; Automatic-Module-Name; and other potential fixes Now passes the TCK tests that were backwards incompatible with 1.0. The OSGI test is enabled now that jsr107 includes the bindings. Added... — committed to ben-manes/caffeine by ben-manes 7 years ago
- JCache 1.1; Automatic-Module-Name; and other potential fixes Now passes the TCK tests that were backwards incompatible with 1.0. The OSGI test is enabled now that jsr107 includes the bindings. Added... — committed to ben-manes/caffeine by ben-manes 7 years ago
Thanks guys!
I plan on closing this at the end of next week, unless there is new information to point to a cause other than the Linux kernel bug.
@jbduncan
I don’t think so, the folder our java bins are in is named
java-8-oracle
, theCOPYRIGHT
mentions oracle in name, there’s a release file that says commercial under build type. The README just points to java.com