Windows 7 / Getting Started

Memory

Interestingly, in the operating systems of today, memory and disk space will have some overlap. Using so-called virtual memory, when a computer system experiences memory pressure - that is, a need for more memory than what is actually installed on the server - the operating system will begin to page some unused or (less used) memory to disk. This is used to make some of the main memory available for use by other programs.

Virtual memory works by paging in and paging out. When the operating system is paging out, it is writing a copy of memory from RAM to disk. When the operating system is paging in, it is reading memory from disk to put into RAM. You can configure a server to have much more virtual memory than physical RAM. However, that will probably not provide the best performance for your server.

For a given workload, a server will always require approximately the same amount of virtual memory. Paging activity is measured in terms of pages per second, which measures the total number of pages either read or written from disk in a given second. However, there is no fixed limit on the value of Memory\Pages/Sec that represents a ''problem.'' In the old days (Windows NT 4.0), a value greater than 20 was considered to indicate that too much paging was going on. However, that value was artificial due to the slow speeds of disk, memory, and processor of the day. To get the best counter value, you need to look at historical data from your Exchange servers to determine what is in range and what is out of range. However, the counter should never exceed a value of 1000.

In general terms, if paging plus other I/O to the volume where the paging file resides causes disk queuing to occur, then too much paging is occurring.

All paging occurs to and from a file known as the paging file. On Windows systems, this file is known as pagefile.sys and it resides in the root directory of a paging volume. This file has the hidden and system attributes set on the file. That means it is not normally visible in Windows Explorer or from the command prompt. It is possible to have multiple paging files, one per disk volume. This was fairly common with the 32-bit versions of Windows Server, but on 64-bit versions of Windows Server, you should only use a single paging file.

The Memory\Pages/Sec value is the sum of two other values: Memory\Pages Input/Sec and Memory\Pages Output/Sec. The individual meanings of these values are fairly obvious; the number of pages read from the paging file and the number of pages written to the paging file, respectively.

Use of the Paging File

Another value of interest is the Memory\Commit Limit counter. A little explanation is in order for Memory\Commit Limit. The paging file in Windows has a number of possible settings:

  • No paging file
  • System-managed paging file
  • Fixed-size paging file

As you might suspect, when the Windows computer is configured to have no paging file, the paging file has a size of zero. This setting indicates that the paging file may never be expanded. If you select the option to allow Windows to manage the paging file, the minimum size of the paging file is set to the amount of RAM in your computer plus 300 MB. The maximum size of the paging file is set to three times the amount of RAM in your computer. A fixed-size paging file is just that: you specify the minimum and maximum sizes for the paging file. In general, for Windows clients you should allow the system to manage the paging file. For Windows servers, if you have guidance for your server for a specific role (as you will for Exchange servers), follow that guidance. Otherwise, allow the system to manage the paging file.

The system-managed paging file defaults discussed are accurate for Windows Vista (and above) and for Windows Server 2008 (and above). The values are smaller for earlier versions of both the Windows client and Windows server.

The Memory\Commit Limit counter is the amount of virtual memory that can be allocated without expanding the paging file. When the paging file must be expanded, paging out is a much more ''expensive'' operation. Strongly related to the Memory\Commit Limit counter is the value of Memory\Committed Bytes. The Memory\Committed Bytes counter defines how many bytes of the paging file are currently in use.

The final paging file counter of interest is a calculated counter based on the two counters just discussed. That counter is Memory\% Committed Bytes In Use. This counter provides the system administrator with an instantaneous value for how much of the paging file is being used. The counter is the ratio of Memory\Committed Bytes to Memory\Commit Limit. The range of this value is between 0 percent and 100 percent. A low value is good; a high value is bad.

Available Memory

Generally speaking, the more memory a computer has, the better that computer will perform. An efficiency goal for a server is never to use the paging file. This reduces the I/O load on the server as well as reducing the processor overhead of the memory manager on the server. For Exchange Server, there are recommended minimum and maximum values for the amount of memory installed on a server, based on the particular server roles installed on that server. When multiple roles are combined, those values need to be added together to obtain the optimal amount of memory for that server.

Regardless of what programs are installed on a server, it is important to have enough memory on a server to be able to satisfy memory requests, whether those memory requests are large or small. When you do not have sufficient memory installed on a computer, you will have both visible warnings displayed and error entries will be written into the System event log. The Resource Exhaustion Detector has detected that there is very little virtual memory left on a computer and has generated a warning to that effect.

It is certainly possible to track memory availability using the counters described so far. Another counter that is of great value is the Memory\Available MBytes counter. This counter contains the amount of physical memory (not virtual memory) that can be immediately allocated to a running process or used by the operating system. In the general case of a memory leak, the Memory\Available MBytes counter would gradually decrease over time. Eventually, no more memory would be available to the system and the system would become unstable (which is just a fancy way to say that programs would begin crashing). The Memory\Available MBytes counter value should never fall below 50 MB.

Exchange Server 2010 Memory Requirements

In general, Exchange Server 2010 is just like almost any other program - the more memory you allow it to use, the better it will run. The Exchange team at Microsoft has produced guidelines that describe which values they consider the minimum and optimal values of memory on an Exchange server. At the time of this writing, 4 GB RAM sticks are common in servers with 8 GB to 16 GB of RAM more expensive but not prohibitively so for server-class machines.

Each of the various Exchange Server 2010 roles (Edge Transport, Hub Transport, Client Access Server, Mailbox, and Unified Messaging) has different recommendations for the amount of memory. See Table-1 for these recommendations.

Table-1: Exchange Server 2010 Memory Information
Exchange 2010 Server RoleMinimum per ServerRecommended
Edge Transport4 GB1 GB per core (4 GB minimum)
Hub Transport4 GB1 GB per core (4 GB minimum)
Client Access4 GB2 GB per core (8 GB minimum)
Unified Messaging4 GB2 GB per core (4 GB minimum, 8 GB maximum)
Mailbox4 GB4 GB plus 3-30 MB/mailbox
Multiple roles (combinations of Hub Transport, Client Access, and Mailbox server roles)10 GB10 GB plus 3-30 MB per mailbox (4-core server)
14 GB plus 3-30 MB per mailbox (8-core server)
18 GB plus 3-30 MB per mailbox (12-core server)
22 GB plus 3-30 MB per mailbox (16-core server)
30 GB plus 3-30 MB per mailbox (24-core server)
Most of the server role recommendations are on par with their Exchange Server 2007 roles. However, with very large mailbox support, the per-mailbox cache recommendation has increased from 5 MB to 30 MB.
[Previous] [Contents] [Next]