activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alessandro Zanfardino (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQ-1868) Producer block when queue memory limit is setted to 5Mb and no consumer is actived
Date Thu, 24 Jul 2008 08:47:00 GMT

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

Alessandro Zanfardino commented on AMQ-1868:
--------------------------------------------

Hi Hans,
thank you for your answer.

I'm using the default message cursor type: Store based. 

http://activemq.apache.org/message-cursors.html


When my Producer starts, broker works like in the picture "Dispatching Messages for Fast Customer".

When Dispatch Queue becomes full, broker should work like in the picture "Dispatching Messages
if Dispatch Queue is Full".

It seems that 

-  If I use no memory limit for queue, or I use memory limit close to Total Memory
     When Dispatch Queue becomes full then messages are paged in to the dispatch queue from
a pending cursor on demand,
     and producer is not blocked (limited only from disk sapce) 

-  If I use 5Mb memory limit for queue, 
     When Dispatch Queue becomes full producer is blocked, rather than to swith to model that
use Pending Cursor 


So, my question is: why if I use 5Mb memory limit for queue,  broker doesn't work like when
I use no limit (or use high limit)?



Alessandro

> Producer block when queue memory limit is setted to 5Mb and no consumer is actived
> ----------------------------------------------------------------------------------
>
>                 Key: AMQ-1868
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1868
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.1.0
>         Environment: Unix, jdk 1.5.0_12,  AMQ 5.1.0
>            Reporter: Alessandro Zanfardino
>         Attachments: activemq.xml, AMQTester.zip
>
>
> Hallo
>  I'm using the attached source  code  to test  AMQ 5.1.0 
> I'm using following setting:
>        //SESSION
>     ackMode = Session.AUTO_ACKNOWLEDGE;
>         //FACTORY
>     dispatchAsync = true;
>     useAsyncSend  = false;  
>        //PRODUCERS
>     DelveryMode=Pesrsistent 
>     timeToLive = 21600000; //6h
>  If I use the following configuration in activemq.xml:  
>   <memoryUsage limit="20 mb"/>
>   <policyEntry queue=">" memoryLimit="5mb"/>
>  I noted this behaviour:
>  if producer  starts a loop of  sendMessage  on a queue where no consumer is listen,
after N messages, when the 5Mb are full, producer is blocked.
>  Block ends when some consumer registers a listener on this queue and start to conuming
messages.
>  
>   If I change the configuration, removing queue memory limit like below:  
>   <memoryUsage limit="20 mb"/>
>   <policyEntry queue=">"   />
>    and producer  starts a loop of  sendMessage  on a queue where no consumer is listen,
producer is NEVER blocked.
>    Memory usage percentage go up until 90% and then remains steady, but producer continues
to send.
>     I expected this same behaviour when queue memory limit was 5Mb, also. 
>    Further, I set values for  queue memory limit higher than 5Mb   and repeated the test
:
>    memoryLimit="10 mb"    =>      producer was blocked
>   memoryLimit="18 mb"   (=90% of 20Mb)   =>      producer was blocked
>   memoryLimit="19 mb"   ( >90% of 20Mb)   =>      producer NEVER blocked
>    I expected that  producer NEVER blocked in every cases.
>    Please can you help me for this issue?
>    Feel free to ask me other details. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message