[rabbitmq-discuss] separating wheat from chaff inside the stats from rabbitmq_management

Simon MacMullen simon at rabbitmq.com
Mon Apr 8 10:52:26 BST 2013

On 05/04/13 16:27, ed anderson wrote:
> I'm using rabbitmq version 2.8.7, and i'm curious about what some of the
> stats that come out of the management plugin mean..


> These are the things that I don't grok ( please direct me to the decoder
> ring if it exists, I'm happy to read about this topic, but I haven't
> found much via google-search ):
> FWIW, I'm interested in monitoring operational readiness, and throughput.
> inside /api/nodes ..
>   *  Is it good/bad/neither that mem_atom_used is 99% of mem_atom? Does
> this tell me anything about performance or availability?

In 2.x most of these mem_ things are taken straight from the figures 
reported by the underlying Erlang VM, without much regard for usefulness 
- see http://www.erlang.org/doc/man/erlang.html#memory-0.

In 3.0 this was rewritten to give a (somewhat) more RabbitMQ-centric and 
thus hopefully useful view of things.

>          "mem_atom": 1547217,
>          "mem_atom_used": 1536812,

>   * mem_alarm ( not listed ) , is clearly valuable for availability
> monitoring, but how is it triggered?

See memory based flow control at http://www.rabbitmq.com/memory.html

>          "mem_binary": 6349904,
>          "mem_code": 17345156,
>          "mem_ets": 1961472,
>          "mem_limit": 787570688,
>          "mem_proc": 18586392,
>          "mem_proc_used": 18559872,
>          "mem_used": 47203120,
>   * mem_atom_used + mem_binary + mem_code + mem_ets + mem_proc is
> _almost_ equal to mem_used, but not quite. It doesn't appear to be off
> by any reported counter.   Do I even care about that?  What matters from
> these counters?
>   * is mem_used / mem_limit  enough to keep track of my memory-related
> utilization and health?

Pretty much so. We occasionally might want to use the others for 
debugging, but they're quite obscure.

>   * run_queue ?  What is this a reference to ?

Again, quite obscure. This is an approximate equivalent of load average 
for Erlang processes inside the VM.

> inside /api/queues/{vhost}
>   * sometimes message_stats is in the output, and sometimes not.

...depending on whether any channels currently exist that are publishing 
to / consuming from the queue.

>   * if present, message_stats has two possible formats.

...depending on whether that's been going on long enough to calculate rates.

>     When rate is present, is it messages/sec?


>     What does "publish" mean?

That's the raw count of publishes to that queue - but only those from 
channels which are still open. We'll be fixing that and making it 
monotonic in 3.1 (as well as adding a history).

>    (1)   "message_stats": {
>                "publish": 20
>           },
>    (2)  "message_stats": {
>               "publish_details": {
>                   "rate": 2.2547070391502824,
>                   "interval": 4435166,
>                   "last_event": 1365091799843
>             },
>            "publish": 40
>   * inside the backing_queue_status block, does the difference between
> q1 .. q4 matter ( from an operational point of view )

Probably not. Again backing_queue_status is mostly for debugging. q1 - 
q4 and delta are the internal queues that make up the AMQP queue, 
representing different levels of paged-outness.

>   * messages vs messages_ready vs messages_unacknowledged - what's with
> that?  Also, could their respective _details have changed as in the
> example above for message.

messages_ready - messages which could be consumed. 
messages_unacknowledged - messages which have already been consumed and 
are held waiting for the client to acknowledge. messages - the total of 
the two.

And yes, the code that adds _details is generic.

>   * why doesn't message_stats have a correlating "message" key?

What would that key represent?

Cheers, Simon

Simon MacMullen
RabbitMQ, VMware

More information about the rabbitmq-discuss mailing list