0

im facing issue with java.lang.OutOfMemoryError : Direct buffer memory while running the application in Cloud-Hub.

here i'm trying to fetch the data from Oracle DB which has 25K records from Inbound table with 1vCore

The error occurred after all the flow completion at last it is printing the Error logs like below.

[2020-03-29 11:17:30.640] ERROR std-err [ForkJoinPool.commonPool-worker-0]: Exception in thread "ForkJoinPool.commonPool-worker-0" java.lang.OutOfMemoryError: Direct buffer memory [2020-03-29 11:17:30.640] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.nio.Bits.reserveMemory(Bits.java:694) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.nio.DirectByteBuffer.(DirectByteBuffer.java:123) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.io.RandomAccessFileSeekableStream.initByteBuffer(SeekableStream.scala:322) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.io.DelegateSeekableStream.$init$(SeekableStream.scala:55) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.io.RandomAccessFileSeekableStream.(SeekableStream.scala:316) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.io.SeekableStream$.createNotAutoClosedFileStream(SeekableStream.scala:278) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.el.FileBasedCursorStream.delegate$lzycompute(FileBasedCursorStreamProvider.scala:142) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.el.FileBasedCursorStream.delegate(FileBasedCursorStreamProvider.scala:141) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.el.FileBasedCursorStream.release(FileBasedCursorStreamProvider.scala:160) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.el.FileBasedCursorStreamProvider.$anonfun$doRelease$1(FileBasedCursorStreamProvider.scala:91) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.el.FileBasedCursorStreamProvider.$anonfun$doRelease$1$adapted(FileBasedCursorStreamProvider.scala:91) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:58) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:51) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.el.FileBasedCursorStreamProvider.doRelease(FileBasedCursorStreamProvider.scala:91) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.weave.v2.el.FileBasedCursorStreamProvider.releaseResources(FileBasedCursorStreamProvider.scala:85) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.runtime.core.internal.streaming.CursorProviderJanitor.releaseResources(CursorProviderJanitor.java:78) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.runtime.core.internal.streaming.ManagedCursorProvider.releaseResources(ManagedCursorProvider.java:71) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.runtime.core.internal.streaming.CursorManager$EventStreamingState.lambda$dispose$1(CursorManager.java:121) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1597) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at com.github.benmanes.caffeine.cache.UnboundedLocalCache.forEach(UnboundedLocalCache.java:184) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.runtime.core.internal.streaming.CursorManager$EventStreamingState.dispose(CursorManager.java:117) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.runtime.core.internal.streaming.CursorManager$EventStreamingState.access$300(CursorManager.java:85) [2020-03-29 11:17:30.641] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at org.mule.runtime.core.internal.streaming.CursorManager.lambda$new$0(CursorManager.java:37) [2020-03-29 11:17:30.642] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at com.github.benmanes.caffeine.cache.UnboundedLocalCache.lambda$notifyRemoval$0(UnboundedLocalCache.java:157) [2020-03-29 11:17:30.642] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) [2020-03-29 11:17:30.642] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) [2020-03-29 11:17:30.642] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) [2020-03-29 11:17:30.642] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) [2020-03-29 11:17:30.642] ERROR std-err [ForkJoinPool.commonPool-worker-0]: at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Mustafa
  • 977
  • 3
  • 12
  • 25
Karthik
  • 11
  • 4
  • Please add more information: 1) Version of Mule, 2) Version of the Database connector, 3) Attach (as text) in the description the XML of the flow that throws that error. – aled Mar 29 '20 at 21:23

2 Answers2

0

Without looking at you flow source I can only guess. Based on your stack it looks like you do included foreach components and each one uses its own DB sql. Like main foreach looks for accounts then inner foreach for each account looks for activity om this account and the next inner one looks for transactions on this particular activity.

It could be done when you assure that all payloads are the stream ones. And it looks so except I see in the stack one array component. It could be logger or saving some internal data into variable. Something innocent but not a stream. So this component essentially collects in memory all the data and eventually you are out of memory.

Double check all your flows that they use only stream payloads. Then you will be able to process infinite size of data.

Word of caution. That's how it works in theory. And it usually works. However I have open case with Mulesoft on which they have open defect for the SQL stream which became none stream at all and collects data in the memory to release it later. This defect is still not solved.

Alex
  • 4,457
  • 2
  • 20
  • 59
0

Try making the DB operation non repeatable iterable.

aled
  • 21,330
  • 3
  • 27
  • 34