
Looking at the Exchange Store Virtual Memory
Each Store.exe process of a server has a limited amount of memory—called the store virtual memory—that it can address. As you scale a server to accommodate more users and more usage, the server may run low on virtual memory. When a server already has 4 GB of RAM, you cannot expand the memory of the server any further. Adding more physical memory cannot solve errors that indicate that you are out of virtual memory.
When a server is low on virtual memory, the server's overall performance degrades as the low memory situation forces the Store.exe process to use the page file, and the Store.exe process starts paging rapidly.
You can use the performance counters listed in the following table to determine the current state of the store's virtual memory.
Performance Counters for Exchange Store Virtual Memory
|
Counter
|
Expected values
|
|---|
|
MSExchangeIS\VM Largest Block Size
Displays the size (in bytes) of the largest free block of virtual memory.
This counter is a line that slopes down while virtual memory is consumed. When this counter drops below 32 MB, Exchange 2003 logs a warning (Event ID=9582) in the event log. When this counter drops below 16 MB, Exchange logs an error.
|
-
At no point should this value go below 32 MB.
|
|
MSExchangeIS\VM Total 16 MB Free Blocks
Displays the total number of free virtual memory blocks that are greater than or equal to 16 MB.
This counter displays a line that may first rise, but then may eventually fall when free memory becomes more fragmented. It starts by displaying a few large blocks of virtual memory and may progress to displaying a greater number of separate, smaller blocks. When these blocks become smaller than 16 MB, the line begins to fall.
|
-
At no point should this value go below 1.
|
|
MSExchangeIS\VM Total Free Blocks
Displays the total number of free virtual memory blocks regardless of size.
This counter displays a line that may first rise, but then may eventually fall when free memory first becomes fragmented into smaller blocks, and then when these blocks are consumed.
Use this counter to measure the degree to which available virtual memory is being fragmented. The average block size is the Process\Virtual Bytes\STORE instance divided by MSExchangeIS\VM Total Free Blocks.
|
-
At no point should this value go below 1.
|
|
MSExchangeIS\VM Total Large Free Block Bytes
Displays the sum in bytes of all the free virtual memory blocks that are greater than or equal to 16 MB.
This counter monitors store memory fragmentation and forms a line that slopes down when memory is consumed. On a healthy server, the line should stay above 50 MB.
|
-
At no point should this value go below 50 MB.
|
The Store.exe process also uses its own heap allocation mechanism and structures, which are called exchmem. The Store.exe process creates several exchmem heaps at startup, and does not increase the number of heaps unless the existing number is either fully utilized or is fragmented to a point where an allocation cannot find enough contiguous memory to succeed.
If there is a memory utilization problem or internal fragmentation (fragmentation inside the exchmem heaps, which themselves reside inside the store's virtual memory space), the Store.exe process creates new exchmem heaps.
Generally, if the Store.exe process must repeatedly create additional heaps, the overall store virtual memory becomes fragmented or depleted. By tracking the counters listed in the following table, it is possible to determine whether or not the exchmem heaps are a source of problems or performance degradation as the heaps become fragmented.
Performance Counters for exchmem Heaps
|
Counter
|
Expected values
|
|---|
|
MSExchangeIS\Exchmem: Number of heaps with memory errors
Indicates the total number of exchmem heaps that failed allocations due to insufficient available memory.
|
-
This value should be 0 (zero) at all times.
|
|
MSExchangeIS\Exchmem: Number of memory errors
Indicates the total number of exchmem allocations that could not be satisfied by available memory.
|
-
This value should be 0 (zero) at all times.
|
|
MSExchangeIS\Exchmem: Number of Additional Heaps
Indicates the number of exchmem heaps created by store after startup.
|
-
This value should not exceed 3 at any time.
|