You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Nikolay Martynov (JIRA)" <ji...@apache.org> on 2014/01/16 11:43:25 UTC

[jira] [Commented] (AMQ-4971) OOM in DemandForwardingBridge

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

Nikolay Martynov commented on AMQ-4971:
---------------------------------------

The issue can be easily reproduced in the following scenario:
1. Start 3 brokers. Let it be 0, 1, 2
2. In brokers 1 and 2 enable conduit duplex network connector to 0
3. Connect tcp:// producer for topic A to 0 (jmeter)
4. Connect vm:// consumer for topic A to 1 (simple jms message forwarder in camel: from jms, to jms)
5. Connect vm:// producer for topic B to 1 (simple jms message forwarder in camel: from jms, to jms)
6. Connect vm:// consumer for topic B to 2 (simple jms message forwarder in camel: from jms, to jms)
7. Connect vm:// producer for topic C to 2 (simple jms message forwarder in camel: from jms, to jms)
8. Connect tcp:// consumer for topic C to 0 (jmeter)
In summary, we just put bi-directional load to each of network bridges where each bridge has to both send and receive messages and acks.
Since vm:// and camel embedded in the same JVM are faster than tcp:// and peer broker, bridge very quickly fills heap with responseCallback's used to handle ack and reference message body. This isnt controlled by broker memory limits or producer flow control and bridges die on OOM.

Additionally, VMTransport will also keep references to asynchronously handles messages. Since vm:// is faster than tcp://, this is another source of quick OOM where producer flow control and memory limits have no any effect. While queue is bounded, default size is 2000 and with 1MB messages you quickly run out of heap (doc doesnt seem to explain if and how it could be adjusted). Wouldnt be a problem if it could be controlled by broker memory limits and producer flow control.

> OOM in DemandForwardingBridge
> -----------------------------
>
>                 Key: AMQ-4971
>                 URL: https://issues.apache.org/jira/browse/AMQ-4971
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.9.0
>            Reporter: Yuriy Sidelnikov
>              Labels: features
>
> DemandForwardingBridge sends messages to the other broker and asynchronously waits for ACKs keeping message bodies in heap. Amount of un-ACK-ed messages kept in heap is not limited. If local producer is fast then whole heap will be consumed by messages waiting to be ACK-ed by other broker.
> Possible option to fix the issue:
> Don't wait for ACK from other broker when forwarding the message if some threshold of un-ACK-ed messages is reached.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)