Hello Wojtek,

I am taking a look into this, running a JPA james server localy, and synchronizing emails with a remote server, I also notice a memory leak.

I opened an issue to track this: https://issues.apache.org/jira/browse/JAMES-3911

I suspect https://github.com/apache/james-project/pull/1574 could be related...

Best regards

On 02/06/2023 08:58, Wojtek wrote:
Hi,
I was attempting to transfer data from my old account to James and ran into an issue: "OutOfMemoryError: Java heap space". Upon closer inspection, James was using 4,7g virt / 2,3g res memory (system usage of the generated docker image was 7,6g with 0,1g free reported). This is a fairly simple setup of james-jpa backed by MySQL.

Has anyone ran into similar problem? imap sync seemed to process messages one-by-one, so the load wasn't great. I'm currently collecting heapdump.

Error stacktraces entry seems to point to MySQL/openJPA - one assumption would be that James itself can process incomming messages faster than the repository can process/store them? Isn't there a feature that would slow down processing incomming messages in thise case?


21:44:10.161 [WARN ] r.c.Exceptions - throwIfFatal detected a jvm fatal exception, which is thrown and logged below:
java.lang.OutOfMemoryError: Java heap space
        at java.base/java.math.BigInteger.shiftRightImpl(Unknown Source)
        at java.base/java.math.BigInteger.shiftRight(Unknown Source)
        at java.base/sun.security.util.math.intpoly.IntegerPolynomial.setLimbsValuePositive(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial.setLimbsValue(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial$Element.setValue(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial$Element.<init>(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial$ImmutableElement.<init>(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial.getElement(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial.getElement(Unknown Source)         at jdk.crypto.ec/sun.security.ec.XECOperations.encodedPointMultiply(Unknown Source)         at jdk.crypto.ec/sun.security.ec.XDHKeyAgreement.engineDoPhase(Unknown Source)
        at java.base/javax.crypto.KeyAgreement.doPhase(Unknown Source)
        at java.base/sun.security.ssl.KAKeyDerivation.t13DeriveKey(Unknown Source)         at java.base/sun.security.ssl.KAKeyDerivation.deriveKey(Unknown Source)         at java.base/sun.security.ssl.ServerHello$T13ServerHelloConsumer.consume(Unknown Source)         at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(Unknown Source)         at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(Unknown Source)         at java.base/sun.security.ssl.SSLHandshake.consume(Unknown Source)         at java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)         at java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)         at java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)
        at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
        at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)         at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)         at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)         at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)         at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:347)         at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:194)         at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:101)         at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:308)         at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:204)         at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1369)

21:44:14.037 [ERROR] r.c.s.Schedulers - Scheduler worker in group main failed with an uncaught exception
java.lang.OutOfMemoryError: Java heap space
        at java.base/java.math.BigInteger.shiftRightImpl(Unknown Source)
        at java.base/java.math.BigInteger.shiftRight(Unknown Source)
        at java.base/sun.security.util.math.intpoly.IntegerPolynomial.setLimbsValuePositive(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial.setLimbsValue(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial$Element.setValue(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial$Element.<init>(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial$ImmutableElement.<init>(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial.getElement(Unknown Source)         at java.base/sun.security.util.math.intpoly.IntegerPolynomial.getElement(Unknown Source)         at jdk.crypto.ec/sun.security.ec.XECOperations.encodedPointMultiply(Unknown Source)         at jdk.crypto.ec/sun.security.ec.XDHKeyAgreement.engineDoPhase(Unknown Source)
        at java.base/javax.crypto.KeyAgreement.doPhase(Unknown Source)
        at java.base/sun.security.ssl.KAKeyDerivation.t13DeriveKey(Unknown Source)         at java.base/sun.security.ssl.KAKeyDerivation.deriveKey(Unknown Source)         at java.base/sun.security.ssl.ServerHello$T13ServerHelloConsumer.consume(Unknown Source)         at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(Unknown Source)         at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(Unknown Source)         at java.base/sun.security.ssl.SSLHandshake.consume(Unknown Source)         at java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)         at java.base/sun.security.ssl.HandshakeContext.dispatch(Unknown Source)         at java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)
        at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
        at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)         at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)         at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)         at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)         at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:347)         at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:194)         at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:101)         at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:308)         at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:204)         at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1369)





21:47:57.114 [ERROR] o.a.j.i.p.AbstractMailboxProcessor - Unexpected error during IMAP processing org.apache.openjpa.lib.jdbc.ReportingSQLException: Java heap space {prepstmnt 2016315081 SELECT t0.MAILBOX_ID, t0.MAIL_UID, t0.MAIL_IS_ANSWERED, t0.MAIL_BODY_START_OCTET, t0.MAIL_CONTENT_OCTETS_COUNT, t0.MAIL_IS_DELETED, t0.MAIL_IS_DRAFT, t0.MAIL_IS_FLAGGED, t0.MAIL_DATE, t1.MAILBOX_ID, t1.MAILBOX_HIGHEST_MODSEQ, t1.MAILBOX_LAST_UID, t1.MAILBOX_NAME, t1.MAILBOX_NAMESPACE, t1.MAILBOX_UID_VALIDITY, t1.USER_NAME, t0.MAIL_MIME_TYPE, t0.MAIL_MODSEQ, t0.MAIL_IS_RECENT, t0.MAIL_IS_SEEN, t0.MAIL_MIME_SUBTYPE, t0.MAIL_TEXTUAL_LINE_COUNT FROM JAMES_MAIL t0 LEFT OUTER JOIN JAMES_MAILBOX t1 ON t0.MAILBOX_ID = t1.MAILBOX_ID WHERE (t0.MAILBOX_ID = ?) ORDER BY t0.MAIL_UID ASC} [code=0, state=S1000]         at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:219)         at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:203)         at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:58)         at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1171)         at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:300)         at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1870)         at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:290)         at org.apache.openjpa.jdbc.sql.SelectImpl.executeQuery(SelectImpl.java:531)         at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:456)         at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:423)         at org.apache.openjpa.jdbc.sql.LogicalUnion$UnionSelect.execute(LogicalUnion.java:477)         at org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:259)         at org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:248)         at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.open(SelectResultObjectProvider.java:95)         at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
        ... 78 common frames omitted
Wrapped by: org.apache.openjpa.persistence.PersistenceException: Java heap space {prepstmnt 2016315081 SELECT t0.MAILBOX_ID, t0.MAIL_UID, t0.MAIL_IS_ANSWERED, t0.MAIL_BODY_START_OCTET, t0.MAIL_CONTENT_OCTETS_COUNT,  t0.MAIL_IS_DELETED, t0.MAIL_IS_DRAFT, t0.MAIL_IS_FLAGGED, t0.MAIL_DATE, t1.MAILBOX_ID, t1.MAILBOX_HIGHEST_MODSEQ, t1.MAILBOX_LAST_UID, t1.MAILBOX_NAME, t1.MAILBOX_NAMESPACE, t1.MAILBOX_UID_VALIDITY, t1.USER_NAME, t0.MAIL_MIME_TYPE, t0.MAIL_MODSEQ, t0.MAIL_IS_RECENT, t0.MAIL_IS_SEEN, t0.MAIL_MIME_SUBTYPE, t0.MAIL_TEXTUAL_LINE_COUNT FROM JAMES_MAIL t0 LEFT OUTER JOIN JAMES_MAILBOX t1 ON t0.MAILBOX_ID = t1.MAILBOX_ID WHERE (t0
.MAILBOX_ID = ?) ORDER BY t0.MAIL_UID ASC} [code=0, state=S1000]
        at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:5320)         at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:5280)         at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:134)         at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:115)         at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)         at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.handleCheckedException(SelectResultObjectProvider.java:162)         at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:42)         at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1314)         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1061)         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:911)         at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:842)         at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:601)         at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:297)         at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:314)         at org.apache.james.mailbox.jpa.mail.JPAMessageMapper.findMessagesInMailbox(JPAMessageMapper.java:414)         at org.apache.james.mailbox.jpa.mail.JPAMessageMapper.findAsList(JPAMessageMapper.java:113)         at org.apache.james.mailbox.jpa.mail.JPAMessageMapper.findInMailbox(JPAMessageMapper.java:100)         at org.apache.james.mailbox.store.mail.MessageMapper.findInMailboxReactive(MessageMapper.java:88)         at org.apache.james.mailbox.jpa.mail.JPAMessageMapper.listAllMessageUids(JPAMessageMapper.java:92)         at org.apache.james.mailbox.store.StoreMessageManager.lambda$listAllMessageUids$23(StoreMessageManager.java:986)         at org.apache.james.mailbox.store.transaction.TransactionalMapper.execute(TransactionalMapper.java:38)
        ... 64 common frames omitted


Wrapped by: org.apache.openjpa.persistence.RollbackException: Java heap space {prepstmnt 2016315081 SELECT t0.MAILBOX_ID, t0.MAIL_UID, t0.MAIL_IS_ANSWERED, t0.MAIL_BODY_START_OCTET, t0.MAIL_CONTENT_OCTETS_COUNT, t0 .MAIL_IS_DELETED, t0.MAIL_IS_DRAFT, t0.MAIL_IS_FLAGGED, t0.MAIL_DATE, t1.MAILBOX_ID, t1.MAILBOX_HIGHEST_MODSEQ, t1.MAILBOX_LAST_UID, t1.MAILBOX_NAME, t1.MAILBOX_NAMESPACE, t1.MAILBOX_UID_VALIDITY, t1.USER_NAME, t0. MAIL_MIME_TYPE, t0.MAIL_MODSEQ, t0.MAIL_IS_RECENT, t0.MAIL_IS_SEEN, t0.MAIL_MIME_SUBTYPE, t0.MAIL_TEXTUAL_LINE_COUNT FROM JAMES_MAIL t0 LEFT OUTER JOIN JAMES_MAILBOX t1 ON t0.MAILBOX_ID = t1.MAILBOX_ID WHERE (t0.MA
ILBOX_ID = ?) ORDER BY t0.MAIL_UID ASC} [code=0, state=S1000]
        at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:713)         at org.apache.james.mailbox.jpa.JPATransactionalMapper.commit(JPATransactionalMapper.java:71)
        ... 65 common frames omitted
Wrapped by: org.apache.james.mailbox.exception.MailboxException: Commit of transaction failed         at org.apache.james.mailbox.jpa.JPATransactionalMapper.commit(JPATransactionalMapper.java:73)         at org.apache.james.mailbox.store.transaction.TransactionalMapper.execute(TransactionalMapper.java:39)         at org.apache.james.mailbox.store.StoreMessageManager.listAllMessageUids(StoreMessageManager.java:985)         at org.apache.james.mailbox.store.StoreMessageManager.search(StoreMessageManager.java:835)         at org.apache.james.mailbox.store.StoreMessageManager.search(StoreMessageManager.java:132)         at org.apache.james.imap.processor.base.SelectedMailboxImpl.finishInit(SelectedMailboxImpl.java:167)         at org.apache.james.imap.processor.AbstractSelectionProcessor.selectMailbox(AbstractSelectionProcessor.java:426)         at org.apache.james.imap.processor.AbstractSelectionProcessor.lambda$selectMailbox$25(AbstractSelectionProcessor.java:399)         at com.github.fge.lambdas.functions.FunctionChainer.doApply(FunctionChainer.java:20)         at com.github.fge.lambdas.functions.ThrowingFunction.apply(ThrowingFunction.java:17)
        ... 56 common frames omitted
Wrapped by: com.github.fge.lambdas.ThrownByLambdaException: org.apache.james.mailbox.exception.MailboxException: Commit of transaction failed         at com.github.fge.lambdas.functions.ThrowingFunction.apply(ThrowingFunction.java:21)         at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132)         at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74)         at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)         at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)         at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)         at reactor.core.publisher.MonoCallable$MonoCallableSubscription.request(MonoCallable.java:156)         at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2341)         at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74)         at reactor.core.publisher.MonoCallable.subscribe(MonoCallable.java:48)         at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
        at reactor.core.publisher.MonoUsing.subscribe(MonoUsing.java:109)
        at reactor.core.publisher.MonoUsing.subscribe(MonoUsing.java:102)
        at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240)         at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4444)
        at reactor.core.publisher.Mono.subscribeWith(Mono.java:4510)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4272)
        at org.apache.james.imapserver.netty.ImapChannelUpstreamHandler.channelRead(ImapChannelUpstreamHandler.java:367)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)         at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)         at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)         at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)         at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)         at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1373)
        at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1236)
        at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1285)
        at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529)         at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)         at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)         at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)         at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)         at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)         at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)         at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)         at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995)         at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at java.base/java.lang.Thread.run(Unknown Source)



---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org
For additional commands, e-mail: server-user-h...@james.apache.org

Reply via email to