ehCache 2.4.4 का उपयोग करके, मुझे लगता है कि ehCache सेगमेंट ऑब्जेक्ट पर डेडलॉक हो गया है। अन्य लॉगिंग से, मुझे पता है कि 'प्रतीक्षा थ्रेड', 16 9 4 आखिरकार इस स्टैक ट्रेस उत्पन्न होने से 9 घंटे पहले कुछ भी चला गया। इस बीच, 16 9 6 कई अन्य काम चला गया है और किया गया है, इसलिए यह ताला निश्चित रूप से गलत तरीके से आयोजित किया जा रहा है।मैं इस स्पष्ट एह कैश डेडलॉक के आसपास कैसे काम कर सकता हूं?
मुझे पूरा भरोसा है कि मैं सीधे किसी सेगमेंट इंस्टेंस को लॉक नहीं कर रहा हूं, इसलिए मुझे लगता है कि यह लाइब्रेरी में किसी प्रकार का मुद्दा आंतरिक है। कोई विचार?
"Model Executor - 1696" Id=1696 in TIMED_WAITING on lock=java.u[email protected]92eb1ed
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
at java.util.concurrent.PriorityBlockingQueue.poll(Unknown Source)
at com.rtrms.application.modeling.local.BlockingTaskList.takeTask(BlockingTaskList.java:20)
at com.rtrms.application.modeling.local.ModelExecutor.executeNextTask(ModelExecutor.java:71)
at com.rtrms.application.modeling.local.ModelExecutor.run(ModelExecutor.java:46)
Locked synchronizers: count = 1
- [email protected]3d767f
"Model Executor - 1694" Id=1694 in WAITING on loc[email protected]4a3d767f
owned by Model Executor - 1696 Id=1696
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(Unknown Source)
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(Unknown Source)
at net.sf.ehcache.store.compound.Segment.unretrievedGet(Segment.java:248)
at net.sf.ehcache.store.compound.CompoundStore.unretrievedGet(CompoundStore.java:191)
at net.sf.ehcache.store.compound.impl.DiskPersistentStore.containsKeyInMemory(DiskPersistentStore.java:72)
at net.sf.ehcache.Cache.searchInStoreWithStats(Cache.java:1884)
at net.sf.ehcache.Cache.get(Cache.java:1549)
at com.rtrms.amoeba.cache.DistributedModeledSecurities.get(DistributedModeledSecurities.java:57)
at com.rtrms.amoeba.modeling.AssertPersistedModeledSecurities.get(AssertPersistedModeledSecurities.java:44)
at com.rtrms.application.modeling.tasks.ExpandableModelingTask.getNextUnexecutedTask(ExpandableModelingTask.java:35)
at com.rtrms.application.modeling.local.BlockingTaskList.takeTask(BlockingTaskList.java:36)
at com.rtrms.application.modeling.local.ModelExecutor.executeNextTask(ModelExecutor.java:71)
at com.rtrms.application.modeling.local.ModelExecutor.run(ModelExecutor.java:46)
Locked synchronizers: count = 0
यह पता चला है कि यह प्रश्न अमान्य है। मैंने इस दस्तावेज (http://ehcache.org/documentation/user-guide/jta#performance) का अर्थ यह बताया है कि स्पष्ट ताले सेगमेंट आधारित लॉकिंग का उपयोग नहीं करते हैं, लेकिन यह पता चला है कि यह सच नहीं है। यह डेडलॉक मेरे कोड के कारण हुआ था, एक लॉक रिलीज था जो अंततः() ब्लॉक में नहीं थी। – sharakan
यदि आप पहले से ही इसे समझ चुके हैं तो आप अपने प्रश्न का उत्तर क्यों नहीं देते हैं, तो यह अनुत्तरित प्रश्नों में मौजूद नहीं होगा? – xmoex