[rabbitmq-discuss] Per-Connection Flow Control - RMQ 2.8.1

DawgTool dawgtool at aol.com
Thu Apr 12 15:52:02 BST 2012

Hi Simon,

Just a quick update. I have collected some stats, but mostly looking at 
the rabbitmqctl list_channels. Anyway, I will get those graphed at some 

I did however build the same setup (2.8.1/R15B) on a 16 core/96GB 
machine and I hit the same limits as the 4 core/16GB.

So right now it doesn't appear to be a 'horse-power' issue, possible its 
a logic/functional issue.  Let me know what you think.


On 3/28/12 8:42 AM, Simon MacMullen wrote:
> On 28/03/12 11:32, Simon MacMullen wrote:
>> I will try to reproduce based on the above, but anything else you can
>> tell me would be a great help.
> Hmm, I'm struggling with this.
> I can certainly get into a state with a combination of x-message-ttl, 
> lots of messages expiring, and enough memory pressure to push much of 
> the queue onto disc, such that the queue performance fluctuates quite 
> a bit (as it switches between accepting new messages / paging messages 
> out to disc / paging them back in / expiring them).
> But I can't get a message rate that works OK in this scenario with 
> flow control disabled but blocks for long periods with it enabled. If 
> the message rate is high enough for flow control to kick in, then it's 
> also high enough for memory use to go up as messages wait to enter the 
> queue if flow control is disabled. Eventually the memory alarm goes 
> off instead.
> So can you provide more information about your use pattern?
> Having said that, if you just want to disable flow control and are 
> prepared to build from source, you could apply the following patch:
> diff -r f0dafaca6cd1 src/rabbit_reader.erl
> --- a/src/rabbit_reader.erl    Mon Mar 26 17:12:41 2012 +0100
> +++ b/src/rabbit_reader.erl    Wed Mar 28 13:40:03 2012 +0100
> @@ -360,7 +360,7 @@
>  control_throttle(State = #v1{connection_state = CS,
>                               conserve_memory  = Mem}) ->
> -    case {CS, Mem orelse credit_flow:blocked()} of
> +    case {CS, Mem} of
>          {running,   true} -> State#v1{connection_state = blocking};
>          {blocking, false} -> State#v1{connection_state = running};
>          {blocked,  false} -> ok = rabbit_heartbeat:resume_monitor(
> But I would like to understand more about what you're seeing.
> Cheers, Simon

More information about the rabbitmq-discuss mailing list