У меня есть основная задача потребителя на основе пружины для ввода / вывода событий в реляционной базе данных. Наличие Jpa с Hibernate в качестве ORM.
Мой потребитель отлично работает с данными около 10K записей, но потерпел неудачу, когда мы ищем событие в данных около 2 миллионов записей. При выполнении анализа корневых причин (RAC) с использованием журналов. Я получил ошибку как:
> > Application exception overridden by rollback exception java.lang.OutOfMemoryError: Java heap space 2019-03-27 16:50:48,942
> INFO i.s.s.e.s.EventServiceImpl -Some Exception Occurred in
> fetchAllEventsByReferenceId :
> org.springframework.transaction.TransactionSystemException: Could not
> roll back JPA transaction; nested exception is
> javax.persistence.PersistenceException: unexpected error when
> rollbacking
> at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:548)
> at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853)
> at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830)
> at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:522)
> at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:286)
> at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
> at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
> at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
Пока я пытался очистить кучу, используя -XX: + UseConcMarkSweepGC
. Все началось хорошо, но теперь мой пул Хикари занят и застрял, отвечая и выдавая исключение:
Ошибка при выполнении команды загрузки: org.hibernate.exception.GenericJDBCException: не удалось извлечь ResultSet
java.sql.SQLNonTransientConnectionException: сбой канала связи во время отката (). Разрешение транзакции неизвестно.
org.hibernate.exception.GenericJDBCException: не удалось извлечь ResultSet