Hi all,<br><br>We&#39;re in a particular situation where occasionally a client will be disconnected from the server (often through some unclean network break, such as the random stuff that can happen with 3G data links and virtual machines), but the queues associated with that client don&#39;t die and continue to grow.<br>
<br>Eventually some of the queues grow so large, that we start seeing txamqp (the client side library we use) start whining that it doesn&#39;t know what to do with &quot;channel_flow&quot; - presumably this is the memory based throttling kicking in (though I don&#39;t recall explicitly enabling it - unless it&#39;s something auto-enabled by default in the .deb packages?)...<br clear="all">
<br>Questions would be:<br><ol><li>Even though we haven&#39;t explicitly enabled it, if we do start to see channel_flow messages, this would be the memory based throttling, correct?<br><br></li><li>Besides rabbit noticing when a TCP connection dies - is there any &quot;heartbeat&quot; functionality built into rabbit and/or the AMQP spec that would actually test whether or not a connection is active, and if it isn&#39;t, kill the relevant queues? Do I as the person who monitors the server configure this, or do the programmers who write our clients need to incorporate something into their code?<br>
<br></li><li>In calculating the &quot;5%&quot; of memory available threshold, what would rabbit be considering memory.. Real? Swap? Virtual? All of the above?<br>Ie.<br><span style="font-family: courier new,monospace;"># cat /proc/meminfo | grep -i &quot;total\|free&quot;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">MemTotal:       514056 kB</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">MemFree:        144860 kB</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">HighTotal:           0 kB</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">HighFree:            0 kB</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">LowTotal:       514056 kB</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">LowFree:        144860 kB</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">SwapTotal:     1044184 kB</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">SwapFree:       838244 kB</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">VmallocTotal:   442360 kB</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">HugePages_Total:     0</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">HugePages_Free:      0</span><br></li></ol>As a failsafe against runaway queues, I&#39;m thinking of implementing something that culls queues over a given order of magnitude on a timed basis, or triggered by a lower memory threshold than rabbit&#39;s..<br>