Wir haben App mit ehcache 2.9.0. In letzter Zeit haben wir einmal wöchentlich Deadlocks im Zusammenhang mit ehcache get/put-Operationen beobachtet, und sobald wir den Cache geleert haben, verschwindet das Problem.Ehcache Deadlock in ehcache 2.9.0
beobachten wir die Sperre auf der RandomAccessFile während Cache-Operation und ReentrantReadWriteLock während Put-Operation.
Fordern Sie Einblick von Ehcache-Experten, was könnte möglich Problem sein?
PFB die Fäden aus dem Faden-Dumps
"HTTP938" # 25950 Daemon PRIO = 5 os_prio = 0 tid = 0x0000000002614000 NID = 0x5a64 der Bedingung wartet [0x00007fcd36965000] java.lang.Thread.State: WAITING (Parken) bei sun.misc.Unsafe.park (Mutter Methode) - Parkplatz warten < 0x00000005cbbc6768> (ein java.util.concurrent.locks.ReentrantReadWriteLock $ NonfairSync) bei java.util.concurrent.locks.LockSupport. park (LockSupport.java:175) bei java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt (AbstractQueuedSynchronizer.java:836) bei j ava.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared (AbstractQueuedSynchronizer.java:967) bei java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared (AbstractQueuedSynchronizer.java:1283) bei java.util.concurrent.locks.ReentrantReadWriteLock $ ReadLock.lock (ReentrantReadWriteLock.java:727) unter net.sf.ehcache.store.disk.Segment.flush (Segment.java:1010) at net.sf.ehcache.store.disk.DiskStore.flush (DiskStore. java: 248) bei net.sf.ehcache.store.CacheStore $ 1.evicted (CacheStore.java:99) bei net.sf.ehcache.store.CacheStore $ 1.evicted (CacheStore.java:96) at net. sf.ehcache.store.cachtingtier.OnHeachCachingTier $ 1.evicted (OnHeapCachingTier.java:86) bei net.sf.ehcache.store.cachtingtier.CountBasedBackEnd $ 1.removed (CountBase dBackEnd.java:103) bei net.sf.ehcache.util.concurrent.ConcurrentHashMap.internalReplace (ConcurrentHashMap.java:1346) at net.sf.ehcache.util.concurrent.ConcurrentHashMap.removeAndNotify (ConcurrentHashMap.java:2647) bei net.sf.ehcache.store.cachingtier.CountBasedBackEnd.remove (CountBasedBackEnd.java:115) bei net.sf.ehcache.store.cachingtier.OnHeapCachingTier.remove (OnHeapCachingTier.java:206) bei net.sf. ehcache.store.CacheStore.put (CacheStore.java:134) unter net.sf.ehcache.Cache.putInternal (Cache.java: 1600) at net.sf.ehcache.Cache.put (Cache.java:1526) bei net.sf.ehcache.Cache.put (Cache.java:1491) bei org.springframework.cache.ehcache.EhCacheCache.put (EhCacheCache.java: 82) an org.springframework.cache.interceptor.AbstractCacheInvoker.doPut (AbstractCacheInvoker.java:82) bei org.springframework.cache.interceptor.CacheAspectSupport $ CachePutRequest.apply (CacheAspectSupport.java:651) bei org.springframework.cache.interceptor .CacheAspectSupport.execute (CacheAspectSupport.java:358) bei org.springframework.cache.interceptor.CacheAspectSupport.execute (CacheAspectSupport.java:299) bei org.springframework.cache.interceptor.CacheInterceptor.invoke (CacheInterceptor.java:61) bei org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) bei org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept (CglibAopProxy.java:653)
"HTTP927" # 25855 Daemon prio = 5 os_prior = 0 tid = 0x00007fce685c9000 nid = 0x4fb6 wartet auf den Monitoreintrag [0x00007fcd359e8000] java.lang.Thread.Zustand: GESPERRT (auf Objekt-Monitor) bei net.sf.ehcache.store.disk.DiskStorageFactory.read (DiskStorageFactory.java:362) - Warte < 0x00000005cbdfb538> (a java.io.RandomAccessFile) im Netz zu sperren. sf.ehcache.store.disk.DiskStorageFactory.retrieve (DiskStorageFactory.java:864) unter net.sf.ehcache.store.disk.Segment.decode (Segment.java:171) unter net.sf.ehcache.store. disk.Segment.remove (Segment.java:644) unter net.sf.ehcache.store.disk.DiskStore.remove (DiskStore.java:625) unter net.sf.ehcache.store.CacheStore.remove (CacheStore. java: 236) bei net.sf.ehcache.Cache.removeInternal (Cache.java:2401) bei net.sf.ehcache.Cache.tryRemoveImmediately (Cache.java:2162) bei net.sf.ehcache.Cache.get (Cache.java:1739) bei org.springframework.cache.ehcache.EhCacheCache.get (EhCacheCache.java:65) bei org.springframework.cache.interceptor.AbstractCacheInvoker.doGet (AbstractCacheInvoker.java:68) bei org.springframework.cache.interceptor.CacheAspectSupport.findInCaches (CacheAspectSupport.java:461) bei org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem (CacheAspectSupport.java:432) bei org. springframework.cache.interceptor.CacheAspectSupport.execute (CacheAspectSupport.java:333) bei org.springframework.cache.interceptor.CacheAspectSupport.execute (CacheAspectSupport.java:299) bei org.springframework.cache.interceptor.CacheInterceptor.invoke (CacheInterceptor.java:61) bei org.springframework.aop.fr amework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) bei org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept (CglibAopProxy.java:653)
Thema HTTP762 Owns Monitor Lock auf 0x00000005cbdfb538 auf Java. io.RandomAccessFile.readFully (RandomAccessFile.java:416) - gesperrt [0x00000005cbdfb538] (a java.io.RandomAccessFile) bei org.springframework.cache.ehcache.EhCacheCache.put (EhCacheCache.java:82) Danke, Nivedita
Es gab 39 Threads warten auf Sperre durch den Cache erhalten. –
Wird der Cache irgendwann fertig gestellt? Oder ist es das gleiche endlos? Wer sperrt 0x00000005cbdfb538? – Henri
Ich finde die 0x00000005cbdfb538 ist gesperrt von Cache PUT –