java - Ehcache 2.10 线程被阻塞

标签 java multithreading hibernate ehcache ehcache-2

ehcache版本
2.10.6
偶尔,由于线程被阻塞,Ehcache 服务器会宕机。请在下面找到有关相互阻塞的存储桶配置和线程详细信息的详细信息。
有多个桶:
桶配置

<cache name="bucket1"
           maxBytesLocalHeap="300m"
           maxBytesLocalDisk="15g"
           timeToIdleSeconds="240"
           timeToLiveSeconds="240"
           eternal="false"
           diskSpoolBufferSizeMB="30"
           memoryStoreEvictionPolicy="LFU"
           diskExpiryThreadIntervalSeconds="360"
           transactionalMode="off"
           diskPersistent="true">
    </cache>
线程转储
http-nio-8080-exec-26
Stack Trace is:
java.lang.Thread.State: BLOCKED (on object monitor)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault.get(OnHeapCachingTier.java:332)
- **waiting to lock <0x0000000604407968>** (a net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault.access$200(OnHeapCachingTier.java:312)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier.getValue(OnHeapCachingTier.java:300)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier.access$000(OnHeapCachingTier.java:62)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier$1.evicted(OnHeapCachingTier.java:84)
at net.sf.ehcache.store.cachingtier.PooledBasedBackEnd$1.removed(PooledBasedBackEnd.java:195)
at net.sf.ehcache.util.concurrent.ConcurrentHashMap.internalReplace(ConcurrentHashMap.java:1346)
at net.sf.ehcache.util.concurrent.ConcurrentHashMap.removeAndNotify(ConcurrentHashMap.java:2647)
at net.sf.ehcache.store.cachingtier.PooledBasedBackEnd.remove(PooledBasedBackEnd.java:113)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier.remove(OnHeapCachingTier.java:207)
at net.sf.ehcache.store.CacheStore.put(CacheStore.java:134)
at net.sf.ehcache.Cache.putInternal(Cache.java:1616)
at net.sf.ehcache.Cache.put(Cache.java:1542)
at net.sf.ehcache.Cache.put(Cache.java:1507)......



http-nio-8080-exec-174
Stack Trace is:
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at net.sf.ehcache.util.concurrent.ConcurrentHashMap$Node.tryAwaitLock(ConcurrentHashMap.java:687)
- locked <0x00000005fa31d820> (a net.sf.ehcache.util.concurrent.ConcurrentHashMap$Node)
at net.sf.ehcache.util.concurrent.ConcurrentHashMap.internalReplace(ConcurrentHashMap.java:1311)
at net.sf.ehcache.util.concurrent.ConcurrentHashMap.remove(ConcurrentHashMap.java:2643)
at net.sf.ehcache.store.cachingtier.PooledBasedBackEnd.evict(PooledBasedBackEnd.java:159)
at net.sf.ehcache.store.cachingtier.PooledBasedBackEnd$PoolParticipant.evict(PooledBasedBackEnd.java:251)
at net.sf.ehcache.pool.impl.FromLargestCachePoolEvictor.freeSpace(FromLargestCachePoolEvictor.java:49)
at net.sf.ehcache.pool.impl.AtomicPoolAccessor.add(AtomicPoolAccessor.java:71)
at net.sf.ehcache.pool.impl.AbstractPoolAccessor.add(AbstractPoolAccessor.java:67)
at net.sf.ehcache.store.disk.Segment.put(Segment.java:427)
at net.sf.ehcache.store.disk.DiskStore.putFaulted(DiskStore.java:229)
at net.sf.ehcache.store.CacheStore$3.call(CacheStore.java:143)
at net.sf.ehcache.store.CacheStore$3.call(CacheStore.java:137)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault.get(OnHeapCachingTier.java:335)
**- locked <0x0000000604407968> (a net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault)**
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault.access$200(OnHeapCachingTier.java:312)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier.get(OnHeapCachingTier.java:176)
at net.sf.ehcache.store.CacheStore.put(CacheStore.java:137)
at net.sf.ehcache.Cache.putInternal(Cache.java:1616)
at net.sf.ehcache.Cache.put(Cache.java:1542)
at net.sf.ehcache.Cache.put(Cache.java:1507)
.......

最佳答案

正如评论中所述,我没有真正的解释,但是......
我们在 ehcache 2.10.5 中遇到了同样的问题:只有堆缓存和 hibernate 和独立使用。
我们通过升级到 ehcache 3.x(当时是 3.6)来修复它。
我们没有调查 2.10 的问题,因为它是一个过时的版本。

关于java - Ehcache 2.10 线程被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600266/

相关文章:

javascript - Android WebView 对 Java 函数的异步调用

multithreading - 从另一个线程读取Qt小部件可以吗?

c - 多个线程在没有锁的情况下递增共享变量但返回 "unexpected"输出

mysql - spring mvc 3 hibernate 异常

java - 带有 JPA/Hibernate 的 Spring MVC 中是否仍然需要 DAO

java - 无法使用 POST 请求和 Jackson 发送 JSON

java - Google Marketplace App/OAuth2 - 以编程方式委托(delegate)全域授权

java - 如何从 Websphere UserRegistry 获取用户详细信息

java - 方法声明无效 - 需要返回类型

Python threading.Timer 只重复一次