0

Based on this thread, it seems that it's "normal" for the MSMQ process to take up an much memory as is available until it comes under memory pressure.

It seems most monitoring tools base memory usage on on Working Set memory. This includes the one we currently use (New Relic) which uses this powershell query:

Get-WmiObject -Query "SELECT CommitLimit,CommittedBytes,AvailableBytes FROM 
Win32_PerfRawData_PerfOS_Memory"

Task Manager also seems to use Working Set Memory for its default memory graph.

We commonly see the memory use (based on Working Set) spike to 90% and above, which according to the thread linked above, is not abnormal.

Is it fairly standard to see high memory usage on machines that use MSMQ? Is is standard practice to not monitor these machines for memory usage?

Phil Sandler
  • 151
  • 7
  • 2
    It's (nearly) never pointless to monitor the memory usage of a system. You just have to figure out what values will alarm you. In your case, having a very low memory usage might be a reason to worry. – Sven Sep 03 '14 at 21:16
  • Might not be the best title for this question--I'll change it so it doesn't say "Pointless". – Phil Sandler Sep 03 '14 at 21:25

2 Answers2

1

Memory usage in all Windows Vista+ versions is setup to keep as much stuff in memory as possible. This is the most effective way to do things as it prevents reads from disk, and flushing unneeded pages from RAM takes significantly less time than filling those pages from disk. The same problem you're seeing applies to MSSQL servers, Exchange, anything else that has a use for immense amounts of RAM since they will load as much into RAM as possible at any point.

If you're not seeing actual issues with paging out operations (Disk thrashing), Out of Memory errors in other applications, or performance issues with other applications, you can safely ignore high memory use. Empty RAM is not-needed RAM. Conversely, if you're expecting high memory usage on a machine and you're seeing zero-ish usage, there's likely an issue.

As for monitoring of the memory usage, if you're monitoring only total RAM used, I would stop getting alerted at high levels. Keep alerting on for low RAM utilization the same as you would for low CPU utilization on a server which has applications that keep CPU at 20% (or whatever) when idle. If you're monitoring what application is using what amount of memory, and the server is hosting multiple applications, you may want to test your other applications without MSMQ running so you can get an accurate representation of how much RAM they'll use if given the opportunity, and adjust allocation and monitoring to account for those needs.

At our organization we've stopped monitoring high RAM consumption on all servers which we expect high RAM utilization; it does nothing but trigger alerts that need to be silenced, and obfuscates the legitimate alerts.

This article has some high level info about how memory management was changed in Vista, there have not been hugely significant changes to the memory manager since then, AFAIK.

RobbieCrash
  • 1,131
  • 7
  • 25
1

MSMQ memory usage is directly related to message volume. If memory usage is high then MSMQ is managing a lot of messages at the time. You are better off deciding what is an expected volume of messages for day-to-day usage and alerting when the numbers get higher than that level.

Also item 4 on blog is important if a high volume of messages is regarded as normal.

John Breakwell
  • 757
  • 5
  • 11
  • Do you include Working Set memory in this? I see an ever-increasing working set number, which doesn't go down even when no message processing is happening (until there is memory pressure from elsewhere). – Phil Sandler Sep 04 '14 at 13:14
  • I wouldn't bother monitoring Working Set. It doesn't provide any insight at all into MSMQ health. The "total number of messages" counter is all I'd start with. – John Breakwell Sep 08 '14 at 09:44