You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2024/03/04 08:29:00 UTC

[jira] [Commented] (CAMEL-20486) JMS OutOfMemoryError in Streaming Mode

    [ https://issues.apache.org/jira/browse/CAMEL-20486?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17823075#comment-17823075 ] 

Claus Ibsen commented on CAMEL-20486:
-------------------------------------

Also make sure spool to disk is enabled in stream caching
https://camel.apache.org/manual/stream-caching.html#_configuring_stream_caching

And you can also try debugging camel-jms source code where you receive the message, and Camel is using the artemis streaming mode (you can search the code to find where it does that), and see what happens.

> JMS OutOfMemoryError in Streaming Mode
> --------------------------------------
>
>                 Key: CAMEL-20486
>                 URL: https://issues.apache.org/jira/browse/CAMEL-20486
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jms
>    Affects Versions: 3.22.0
>         Environment: *Environment: Platform: MacOS, Camel 3.22.0, Spring Boot: v2.7.18, Java 17.0.5*
>            Reporter: Michael Rambichler
>            Priority: Minor
>
> We are struggling with big messages sent over jms in streaming fashion in production.
> *Expected:* Messages are transferred in streaming mode without the need of the equivalent amount of memory as the size of the file.
>  
> *Currently: Java.lang.OutOfMemoryError: Java heap space*
> *Environment: Platform: MacOS, Camel 3.22.0*
> And started some analysis locally with the following outcome:
>  
> We setup a simple route wich receives a message from jms.
> {code:java}
> from("jms:testjms_q?streamMessageTypeEnabled=true&artemisStreamingEnabled=true&jmsMessageType=Bytes")
>         .log("Start streaming from jms")
>         .to("stream:out")
>         .log("Finished"); {code}
> For testing purpose we restricted the Java Heap Size to 700MB (-Xmx700m)
>  
> After some analysis we see the 
> {code:java}
> io.netty.util.internal.PlatformDependent.allocateUninitializedArray(int size) {
> return UNINITIALIZED_ARRAY_ALLOCATION_THRESHOLD < 0 || UNINITIALIZED_ARRAY_ALLOCATION_THRESHOLD > size ?
> new byte[size] : PlatformDependent0.allocateUninitializedArray(size);
> }{code}
> Where size is equivalent with the message size awaiting in the JMS queue (around 1GB)
> Which of course lead to a OutOfMemoryError
> {code:java}
> /:: Spring Boot ::               (v2.7.18)
> 2024-02-28 19:00:54.857  INFO 36343 --- [           main] org.example.MySpringBootApplication      : Starting MySpringBootApplication using Java 17.0.5 on atca-052347 with PID 36343 (/Users/at00191173/dev/src/playground/helloJms/target/classes started by at00191173 in /Users/at00191173/dev/src/playground/helloJms)2024-02-28 19:00:54.859  INFO 36343 --- [           main] org.example.MySpringBootApplication      : No active profile set, falling back to 1 default profile: "default"2024-02-28 19:00:55.518  WARN 36343 --- [           main] io.undertow.websockets.jsr               : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used2024-02-28 19:00:55.528  INFO 36343 --- [           main] io.undertow.servlet                      : Initializing Spring embedded WebApplicationContext2024-02-28 19:00:55.528  INFO 36343 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 645 ms2024-02-28 19:00:56.079 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : sun.misc.Unsafe: available2024-02-28 19:00:56.080 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : -Dio.netty.tmpdir: /var/folders/1j/85cl6ywn0tbg9tg4z_kbnhsr0000gr/T (java.io.tmpdir)2024-02-28 19:00:56.080 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : -Dio.netty.bitMode: 64 (sun.arch.data.model)2024-02-28 19:00:56.080 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : Platform: MacOS2024-02-28 19:00:56.080 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : -Dio.netty.maxDirectMemory: -1 bytes2024-02-28 19:00:56.080 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : -Dio.netty.uninitializedArrayAllocationThreshold: -12024-02-28 19:00:56.081 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : -Dio.netty.noPreferDirect: false2024-02-28 19:00:56.181  INFO 36343 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'2024-02-28 19:00:56.227  INFO 36343 --- [           main] io.undertow                              : starting server: Undertow - 2.2.28.Final2024-02-28 19:00:56.231  INFO 36343 --- [           main] org.xnio                                 : XNIO version 3.8.7.Final2024-02-28 19:00:56.236  INFO 36343 --- [           main] org.xnio.nio                             : XNIO NIO Implementation Version 3.8.7.Final2024-02-28 19:00:56.256  INFO 36343 --- [           main] org.jboss.threads                        : JBoss Threads version 3.1.0.Final2024-02-28 19:00:56.276  INFO 36343 --- [           main] o.s.b.w.e.undertow.UndertowWebServer     : Undertow started on port(s) 8080 (http)2024-02-28 19:00:56.398 DEBUG 36343 --- [           main] o.a.camel.component.jms.JmsEndpoint      : Using destinationName: testjms_q on listenerContainer: org.apache.camel.component.jms.DefaultJmsMessageListenerContainer@68454ed52024-02-28 19:00:56.400  INFO 36343 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Apache Camel 3.22.0 (MyCamel) is starting2024-02-28 19:00:56.404  INFO 36343 --- [           main] o.a.c.i.e.DefaultStreamCachingStrategy   : StreamCaching in use with spool directory: /Users/at00191173/temp and rules: [Spool > 9K body size]2024-02-28 19:00:56.408 TRACE 36343 --- [           main] o.a.camel.component.jms.JmsConsumer      : Starting listener container org.apache.camel.component.jms.DefaultJmsMessageListenerContainer@68454ed5 on destination testjms_q2024-02-28 19:00:56.481 DEBUG 36343 --- [           main] i.netty.util.internal.PlatformDependent  : org.jctools-core.MpscChunkedArrayQueue: available2024-02-28 19:00:56.585 DEBUG 36343 --- [           main] c.c.j.DefaultJmsMessageListenerContainer : Established shared JMS Connection2024-02-28 19:00:56.586 DEBUG 36343 --- [           main] c.c.j.DefaultJmsMessageListenerContainer : Resumed paused task: org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker@5bf523e32024-02-28 19:00:56.586 DEBUG 36343 --- [           main] o.a.camel.component.jms.JmsConsumer      : Started listener container org.apache.camel.component.jms.DefaultJmsMessageListenerContainer@68454ed5 on destination testjms_q2024-02-28 19:00:56.586 TRACE 36343 --- [umer[testjms_q]] c.c.j.DefaultJmsMessageListenerContainer : runningAllowed() -> true2024-02-28 19:00:56.587  INFO 36343 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Routes startup (started:1)2024-02-28 19:00:56.587  INFO 36343 --- [           main] o.a.c.impl.engine.AbstractCamelContext   :     Started route1 (jms://testjms_q)2024-02-28 19:00:56.587  INFO 36343 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Apache Camel 3.22.0 (MyCamel) started in 296ms (build:18ms init:92ms start:186ms)2024-02-28 19:00:56.592  INFO 36343 --- [           main] org.example.MySpringBootApplication      : Started MySpringBootApplication in 1.906 seconds (JVM running for 2.423)2024-02-28 19:00:57.061  INFO 36343 --- [(3)-10.84.6.176] io.undertow.servlet                      : Initializing Spring DispatcherServlet 'dispatcherServlet'2024-02-28 19:00:57.062  INFO 36343 --- [(3)-10.84.6.176] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'2024-02-28 19:00:57.063  INFO 36343 --- [(3)-10.84.6.176] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms2024-02-28 19:01:01.682  WARN 36343 --- [umer[testjms_q]] c.c.j.DefaultJmsMessageListenerContainer : Setup of JMS message listener invoker failed for destination 'testjms_q' - trying to recover. Cause: Java heap space
> java.lang.OutOfMemoryError: Java heap space	at io.netty.util.internal.PlatformDependent.allocateUninitializedArray(PlatformDependent.java:323) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.UnpooledUnsafeHeapByteBuf.allocateArray(UnpooledUnsafeHeapByteBuf.java:39) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf.allocateArray(UnpooledByteBufAllocator.java:144) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.UnpooledHeapByteBuf.<init>(UnpooledHeapByteBuf.java:59) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.UnpooledUnsafeHeapByteBuf.<init>(UnpooledUnsafeHeapByteBuf.java:34) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf.<init>(UnpooledByteBufAllocator.java:139) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.UnpooledByteBufAllocator.newHeapBuffer(UnpooledByteBufAllocator.java:82) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.AbstractByteBufAllocator.heapBuffer(AbstractByteBufAllocator.java:169) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.AbstractByteBufAllocator.heapBuffer(AbstractByteBufAllocator.java:160) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at io.netty.buffer.Unpooled.buffer(Unpooled.java:119) ~[netty-buffer-4.1.101.Final.jar:4.1.101.Final]	at org.apache.activemq.artemis.core.message.impl.CoreMessage.initBuffer(CoreMessage.java:150) ~[artemis-core-client-2.19.1.jar:2.19.1]	at org.apache.activemq.artemis.core.client.impl.ClientLargeMessageImpl.checkBuffer(ClientLargeMessageImpl.java:153) ~[artemis-core-client-2.19.1.jar:2.19.1]	at org.apache.activemq.artemis.core.client.impl.ClientLargeMessageImpl.checkCompletion(ClientLargeMessageImpl.java:82) ~[artemis-core-client-2.19.1.jar:2.19.1]	at org.apache.activemq.artemis.jms.client.ActiveMQMessage.doBeforeReceive(ActiveMQMessage.java:799) ~[artemis-jms-client-2.19.1.jar:2.19.1]	at org.apache.activemq.artemis.jms.client.ActiveMQMessageConsumer.getMessage(ActiveMQMessageConsumer.java:230) ~[artemis-jms-client-2.19.1.jar:2.19.1]	at org.apache.activemq.artemis.jms.client.ActiveMQMessageConsumer.receive(ActiveMQMessageConsumer.java:134) ~[artemis-jms-client-2.19.1.jar:2.19.1]	at org.springframework.jms.support.destination.JmsDestinationAccessor.receiveFromConsumer(JmsDestinationAccessor.java:132) ~[spring-jms-5.3.31.jar:5.3.31]	at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:431) ~[spring-jms-5.3.31.jar:5.3.31]	at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:316) ~[spring-jms-5.3.31.jar:5.3.31]	at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-5.3.31.jar:5.3.31]	at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1237) ~[spring-jms-5.3.31.jar:5.3.31]	at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1227) ~[spring-jms-5.3.31.jar:5.3.31]	at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1120) ~[spring-jms-5.3.31.jar:5.3.31]	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)