Tuesday, 1 March 2016

java.lang.OutOfMemoryError: getNewTla

========================================================================
Applies To:
BPEL/OSB - PS6 (11.1.1.7.0)
WLS - 10.3.6
Oracle DB - Enterprise Edition - Version 11.2.0.3
Java - R28.2.7
========================================================================
Problem:
Initially server is responding slow and after sometine it's getting crashed. Exception in logs says java.lang.OutOfMemoryError: getNewTla

Error:
####<Feb 14, 2016 5:10:09 PM UTC> <Error> <EJB> <purushottam_vm> <MS02> <[ACTIVE] ExecuteThread: '47' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1455469809711> <BEA-010080> <An error occurred while attempting to process a message inside a message-driven bean: java.lang.OutOfMemoryError
Exception is : java.lang.OutOfMemoryError
>
####<Feb 14, 2016 5:10:09 PM UTC> <Error> <EJB> <purushottam_vm> <MS02> <[ACTIVE] ExecuteThread: '48' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1455469809919> <BEA-010080> <An error occurred while attempting to process a message inside a message-driven bean: java.lang.OutOfMemoryError: getNewTla
Exception is : java.lang.OutOfMemoryError: getNewTla
        at weblogic.transaction.internal.XidImpl.create(XidImpl.java:291)
        at weblogic.transaction.internal.TransactionManagerImpl.getNewXID(TransactionManagerImpl.java:1912)
        at weblogic.transaction.internal.TransactionManagerImpl.internalBegin(TransactionManagerImpl.java:254)
        at weblogic.transaction.internal.ServerTransactionManagerImpl.internalBegin(ServerTransactionManagerImpl.java:360)
        at weblogic.transaction.internal.ServerTransactionManagerImpl.begin(ServerTransactionManagerImpl.java:335)
        at weblogic.ejb.container.internal.NewJMSMessagePoller.processOneMessage(NewJMSMessagePoller.java:250)
        at weblogic.ejb.container.internal.NewJMSMessagePoller.run(NewJMSMessagePoller.java:120)
        at weblogic.ejb.container.internal.NewJMSMessagePoller.timerExpired(NewJMSMessagePoller.java:235)
        at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:273)
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:545)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
========================================================================
Cause: 
Thread Local Area (TLA) size for object allocation is not sufficient.
========================================================================
Resolution:
We need to fine tune thread-local areas (TLA) for object allocation in JRockit as per application requirement. Sometimes default settings might not work expected.
-XXtlaSize option sets the thread-local area size,
Usage:
-XXtlaSize:min=size,preferred=size,wasteLimit=size

Default TLA settings were,
min=2k
preferred=16k
wasteLimit=1k

Below settings resolved OOM issue in my local environment and have seen performance improvement as well.
We can configure it as startup arguments,
-XXtlaSize:min=8k,preferred=512k,wasteLimit=8k

Restart the server for changes to take effect.

No comments:

Post a Comment