COMANDURENCEEXCEPTION в EclipsElinkJAVA

Программисты JAVA общаются здесь
Anonymous
COMANDURENCEEXCEPTION в EclipsElink

Сообщение Anonymous »

В течение нескольких месяцев мы испытываем параллелизационную индивидуальность от Eclipselink (v2.7.10). Возникновение очень редко. Это происходит несколько раз в неделю в случайном случае из сотен случаев. Исключение выглядит следующим образом: < /p>
Caused by: org.eclipse.persistence.exceptions.ConcurrencyException:
Exception Description: Wait was interrupted.
Message: [Summary current cache key of thread Thread-2096 (ActiveMQ-client-global-threads) Stuck thread problem: unique tiny message number (98)
The Thread [Thread-2096 (ActiveMQ-client-global-threads)] appears to be stuck (possible dead lock ongoing).
The thread is working in the context of (CacheKey) = (--- CacheKey (ObjectNull. Most likely not yet in server session cache and in the process of being created.):
(primaryKey: 22,137,168,321) (object: null) (object hash code: 0) (cacheKeyClass: org.eclipse.persistence.internal.identitymaps.SoftCacheKey) (cacheKey hash code: 1194985224)
(current cache key owner/activeThread: Thread-1930 (ActiveMQ-client-global-threads)) (getNumberOfReaders: 0) (concurrencyManagerId: 29,047,152) (concurrencyManagerCreationDate: 2024-12-03 09:00:08.616) (totalNumberOfTimeCacheKeyAcquiredForReading: 0) (totalNumberOfTimeCacheKeyReleasedForReading: 0) (totalNumberOfTimeCacheKeyReleasedForReadingBlewUpExceptionDueToCacheKeyHavingReachedCounterZero: 0) (depth: 2) ---) .
The thread has been stuck for: (40,004 ms)
Bellow we will describe the ActiveLocks, DeferredLocks and ReadLocks for this thread. Summary of active locks owned by thread Thread-2096 (ActiveMQ-client-global-threads) Listing of all ACTIVE Locks.
Thread Name: Thread-2096 (ActiveMQ-client-global-threads)
0 Active locks.
Summary of deferred locks (could not be acquired and cause thread to wait for object building to complete) of thread Thread-2096 (ActiveMQ-client-global-threads) Listing of all DEFERRED Locks.
Thread Name: Thread-2096 (ActiveMQ-client-global-threads)
1 Deferred locks.
Deferred lock nr: 0 , Deferred cache key: --- CacheKey (ObjectNull. Most likely not yet in server session cache and in the process of being created.): (primaryKey: 22,137,168,321) (object: null) (object hash code: 0) (cacheKeyClass: com.company.technical.server.persistence.internal.cache.MonitoredSoftCacheKey) (cacheKey hash code: 1194985224) (current cache key owner/activeThread: Thread-1930 (ActiveMQ-client-global-threads)) (getNumberOfReaders: 0) (concurrencyManagerId: 29,047,152) (concurrencyManagerCreationDate: 2024-12-03 09:00:08.616) (totalNumberOfTimeCacheKeyAcquiredForReading: 0) (totalNumberOfTimeCacheKeyReleasedForReading: 0) (totalNumberOfTimeCacheKeyReleasedForReadingBlewUpExceptionDueToCacheKeyHavingReachedCounterZero: 0) (depth: 2) ---
Summary of read locks acquired by thread Thread-2096 (ActiveMQ-client-global-threads) Listing of all READ Locks. Step 001 - sparse summary loop over all read locks acquired:
Thread Name: Thread-2096 (ActiveMQ-client-global-threads)
0 read locks. The lockManager for this thread is null.
]
at deployment.com.company.external//org.eclipse.persistence.exceptions.ConcurrencyException.waitWasInterrupted(ConcurrencyException.java:110)
at deployment.com.company.external//org.eclipse.persistence.internal.helper.ConcurrencyManager.releaseDeferredLock(ConcurrencyManager.java:668)
at deployment.com.company.external//org.eclipse.persistence.internal.identitymaps.CacheKey.releaseDeferredLock(CacheKey.java:472)
at deployment.com.company.external//org.eclipse.persistence.internal.sessions.AbstractSession.retrieveCacheKey(AbstractSession.java:5365)
at deployment.com.company.external//org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:1002)
at deployment.com.company.external//org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInternal(ObjectBuilder.java:774)
at deployment.com.company.external//org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:727)
at deployment.com.company.external//org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:705)
at deployment.com.company.external//org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:861)
at deployment.com.company.external//org.eclipse.persistence.queries.Cursor.buildAndRegisterObject(Cursor.java:312)
at deployment.com.company.external//org.eclipse.persistence.queries.ScrollableCursor.retrieveNextObject(ScrollableCursor.java:590)
at deployment.com.company.external//org.eclipse.persistence.queries.ScrollableCursor.loadNext(ScrollableCursor.java:413)
at deployment.com.company.external//org.eclipse.persistence.queries.ScrollableCursor.hasNext(ScrollableCursor.java:279)
at deployment.com.company.external//org.eclipse.persistence.queries.ScrollableCursor.hasMoreElements(ScrollableCursor.java:268)
< /code>
Исключение показывает, что кешки в общем кэше был заблокирован потоком, который никогда не выпустил его. Любая другая поток, которая пытается приобрести, выпущенная/выпущенная на нем, ожидает 40 секунд (значение тайм -аута) и нарастает с complornencyException. Поток, который поддерживает активную блокировку, завершал свой последний контекст нормально без какого -либо исключения. Обходной путь заключался в том, чтобы либо аннулировать общий кэш, либо перезапустить экземпляр сервера. Все попытки воспроизвести в местной среде не добились успеха. < /P>
, казалось, существует высокая корреляция с нагрузкой на экземпляр и активация активации изолированного кэша на одной из сущностей. Мы отказались от активации изолированного кеша, проблема не появилась в течение нескольких месяцев, и с повторной активацией она вернулась. Поскольку изолированный кэш - это то, что мы хотели бы иметь, чтобы избежать проблем со спором, с тех пор мы придумали обходной путь, где в конце обработки выполняется чек, чтобы увидеть, есть ли какие -либо ожидающие активные блокировки, удерживаемые текущими потоком, и если это так, отпустите их явно: < /p>

Thread currentThread = Thread.currentThread();
DeferredLockManager deferredLockManager = ConcurrencyManager.getDeferredLockManager(currentThread);
if (deferredLockManager != null) {
// Release active locks on the thread.
if (!deferredLockManager.getActiveLocks().isEmpty()) {
LOGGER.warn("DeferredLockManager has active locks : {}", getDetail(deferredLockManager));

deferredLockManager.releaseActiveLocksOnThread();
}
// Remove the thread entry
ConcurrencyManager.removeDeferredLockManager(currentThread);
}
< /code>
Исправление работает хорошо. Мы все еще видим, что это происходит несколько раз в неделю, в случае случайного экземпляра. />https://bugs.eclipse.org/bugs/show_bug.cgi?id=559307
Любые указатели по этому вопросу очень ценятся.

Подробнее здесь: https://stackoverflow.com/questions/794 ... clipselink

Вернуться в «JAVA»