Monday, October 4, 2010

Monitoring NServiceBus: Performance Counters Starting Point

We are starting to look at monitoring NServiceBus internally and we're starting with PerfMon in our test and cert environments. I've come up with short list of suggested counters to look at and thought I'd share then with everyone.  I'm also working on a set of custom counters for NSB that I'll be posting shortly on top of the one built in counter.

.NET CLR Exceptions(NServiceBus.Host)\# of Exceps Thrown / sec
     o This will tell you if the app is throwing tons of exceptions, this is important as NSB will retry under
exception scenarios and therefore you may be unaware that your app is blowing up

.NET CLR Memory(NServiceBus.Host)\# of Pinned Objects
     o The number of objects GC can't move back into memory(leak or locked up thread)

.NET CLR Memory(NServiceBus.Host)\% Time in GC
     o How long it takes to do a GC, this will tell us if our memory footprint is too big or out of control for some reason

Distributed Transaction Coordinator\Transactions/sec
     o How many transactions is DTC pumping out

MSMQ Queue(Computer Queues)\Messages in Queue
     o How many messages are in your NSB input queue

MSMQ Queue(info-dev11\private$\nservicebus_error)\Messages in Queue
     o How many messages are in the error queue

MSMQ Service\Incoming Messages/sec
     o Number of messages coming in, tells us if we are getting overloaded

MSMQ Service\Outgoing Messages/sec
     o Number of messages going out, are we sending messages fast enough

     o Critical Time - how old is the oldest message in the queue? This tells us we are processing messages slowly


  1. Great article, very useful - thanks.

  2. In practice we have found it useful to monitor MSMQ quota usage.

    You can do this using the "Total bytes in all queues" perf counter under the MSMQ Service performance object.