I forgot to add that when I execute a qdmanage command to delete the 
"connector" to the broker, the weird queue disappears.

Adel

> Date: Fri, 8 Jul 2016 07:45:49 -0700
> From: adelbout...@live.com
> To: users@qpid.apache.org
> Subject: Re: OutOfMemory exception with a Qpid Java Broker linked to qpid 
> dispatcher
> 
> Fixing bad formatting on Nabbledue to Hotmail:
> 
> Hello,
> 
> We are doing some performance tests with a Qpid Java Broker connected to a
> Qpid dispatcher.
> We have noticed that after some time, the broker dies with an OutOfMemory
> exception and java heap is dumped.
> After analyzing the heap dump and checking the broker, we have noticed 2
> weird behaviors:
> 
> 1) A queue is created on the broker with a weird Name bound on our topic 
> (perf.topic) with a binding key "#". It will receive all messages. 
> This queue seems to be created only when the dispatcher is present and is
> configured.
> As no consumer is connected to this queue, all messages are kept in-memory
> which causes the OutOfMemory exception in the broker.
> 
> Weird Queue definition
> Name: 18bb86dd-2953-4c6f-8eb2-56e5128963f3
> Type: standard
> State: ACTIVE
> Durable: false
> Lifespan: DELETE_ON_NO_OUTBOUND_LINKS
> Persist Messages: NEVER
> Inbound: 0 msg/s (0.00 B/s)
> Outbound: 0 msg/s (0.00 B/s)
> Size: 2374 msgs (0.00 B)
> Pre-fetched: 0 msgs (0.00 B)
> Oldest Message Age: 356.064 secs
> Enforced Max. Ttl(ms): 0
> Enforced Min. Ttl(ms): 0
> Exclusive: LINK
> 
> Consumer connected to that queue (Is it the dispatcher?): 
> Name: qdlink.OyY41QAJRZ4JGGg
> Mode: MOVE
> 
> 
> 2) All messages even those consumed successfully by the consumers are still
> present on the broker
> 
> From the heap dump, we can see the Berkley DB is keeping a reference to all
> messages. Is this also coming from the above weird queue?
> 
> 
> PS: If we only use the dispatcher instead, we have none of the weird
> behaviors
> 
> Extract from the heap dump (Object holding 
> reference to one of the message header. "Validated" is one the message 
> header fields we set and which is already received by a consumer)
> 
> char[9] @ 0xf59ff3d8  VALIDATED                                               
>                    
> '- value java.lang.String @ 0xf59ff3c0  VALIDATED                             
>                          
>   '- value java.util.HashMap$Entry @ 0xf59ff310                               
>                         
>     '- [3] java.util.HashMap$Entry[8] @ 0xf59ff2c0                            
>                         
>       '- table java.util.HashMap @ 0xf59ff188                                 
>                       
>         '- _appProperties
> org.apache.qpid.server.protocol.v1_0.MessageMetaData_1_0 @ 0xf59fef88         
>             
>           '- _metaData
> org.apache.qpid.server.store.berkeleydb.AbstractBDBMessageStore$MessageDataSoftRef
> @ 0xf59fef70     
>             '- _messageDataRef
> org.apache.qpid.server.store.berkeleydb.AbstractBDBMessageStore$StoredBDBMessage
> @ 0xf59fef20
>               '- _handle org.apache.qpid.server.protocol.v1_0.Message_1_0 @
> 0xf59feef0                         
>                 '- _message
> org.apache.qpid.server.message.AbstractServerMessageImpl$Reference @
> 0xf59621c8          
>                   '- _message
> org.apache.qpid.server.queue.StandardQueueEntry @ 0xf5962188                  
>    
>                     '- _next org.apache.qpid.server.queue.StandardQueueEntry
> @ 0xf5962130                     
>           - this$0
> org.apache.qpid.server.protocol.v1_0.MessageMetaData_1_0$MessageHeader_1_0 @
> 0xf59ff1f0   
>  
> Broker Config
> 1 Virtual Host Node and 1 Virtual Host configured with Berkley DB types (BDB
> with the default configuration).
> 1 Topic (perf.topic)
>      bound to a queue (perfQueue) with a binding key and a jms-selector
> filter
>      bound to an "alternate exchange" of a type fanout which is also bound
> to a queue but with no binding key (empty string)
> 
> Dispatcher Config
> 
> qdmanage -b amqp://localhost:10454 create --type=address prefix=perfQueue
> waypoint=true name=perf.queue.addr
> qdmanage -b amqp://localhost:10454 create --type=address prefix=perf.topic
> waypoint=true name=perf.topic.addr
> qdmanage -b amqp://localhost:10454 create --type=connector
> role=route-container addr=localhost port=10455
> name=localhost.broker.10455.connector
> qdmanage -b amqp://localhost:10454 create --type=autoLink addr=perfQueue
> dir=out connection=localhost.broker.10455.connector
> name=localhost.broker.10455.perfQueue.out
> qdmanage -b amqp://localhost:10454 create --type=autoLink addr=perfQueue
> dir=in connection=localhost.broker.10455.connector
> name=localhost.broker.10455.perfQueue.in
> qdmanage -b amqp://localhost:10454 create --type=autoLink addr=perf.topic
> dir=out connection=localhost.broker.10455.connector
> name=localhost.broker.10455.perf.topic.out
> qdmanage -b amqp://localhost:10454 create --type=autoLink addr=perf.topic
> dir=in connection=localhost.broker.10455.connector
> name=localhost.broker.10455.perf.topic.in
> 
> Clients config
> 3 JMS Consumers connected each to perfQueue on the dispatcher
> 2 JMS producers connected each to perf.topic on the dispatcher
> 
> With the above config, we send a number of messages of which only 1/3 will
> be routed to the "alternate exchange" and never consumed.
> 
> 
> Versions
> Qpid Java Broker: 6.0.0
> Qpid Dispatch: 0.6.0
> JMS: 0.9.0
> 
> Regards,
> Adel
> 
> 
> 
> --
> View this message in context: 
> http://qpid.2158936.n2.nabble.com/OutOfMemory-exception-with-a-Qpid-Java-Broker-linked-to-qpid-dispatcher-tp7647065p7647066.html
> Sent from the Apache Qpid users mailing list archive at Nabble.com.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> For additional commands, e-mail: users-h...@qpid.apache.org
> 
                                          

Reply via email to