XADM: Computer That Is Running Exchange 2000 and Windows 2000 Server May Run Out of Virtual Memory with Event ID 12800 (302254)



The information in this article applies to:

  • Microsoft Exchange 2000 Server

This article was previously published under Q302254

SYMPTOMS

When you are running Exchange 2000 Server on a Microsoft Windows 2000 Server-based computer, the server may run out of virtual address space, and the following error message may be logged in the Application event log:
Event Type:  Error
Event Source:  MSExchangeIS
Event Category: Content Engine 
Event ID:   12800
Description:
Message processing failed because there is not enough available memory 
(8007000E-82000387).
					

CAUSE

This problem can occur if the information store (Store.exe) has JET (Ese.dll) allocate contiguous virtual memory for five buffers when a storage group is mounted. The formulas that are used to compute the sizes of these buffers depend upon decisions that are made about "reasonable" default values, and the sizes grow with the number of processors. In Exchange 2000, for a two-processor computer to mount one storage group, JET allocates about 35 megabytes (MBs) of virtual address space. On an eight-processor computer, JET allocates approximately 77 MB of virtual address space. When the system is running low on virtual memory, JET cuts back and releases memory.

In the algorithm for JET to cut back its database cache size when the virtual memory is approaching the limit, JET does not "back off" until the available address space is less than 64 MB. When JET backs off, it gives up 16 MB of space. JET continues to do this each time that the address space falls below 64 MB. The default maximum size of the JET database cache is 900 MB. On a server with three storage groups, for example, the JET database cache is quickly reduced to about 400 MB because JET continually uses this back off algorithm. The JET database cache might grow again, if there is sufficient virtual address space, and if JET can find enough contiguous chunks. However, this is difficult to do; usually the space is too fragmented. The problem with this solution is that if the total available address space is greater than 64 MB, but all of the available chunks are too small to be usable (even by JET), JET does not determine that it needs to back off. JET only backs off if the TOTAL available address space is less than 64 MB

RESOLUTION

To resolve this problem, obtain the latest service pack for Microsoft Exchange 2000 Server. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

301378 XGEN: How to Obtain the Latest Exchange 2000 Server Service Pack

STATUS

Microsoft has confirmed that this is a problem in Microsoft Exchange 2000 Server. This problem was first corrected in Microsoft Exchange 2000 Server Service Pack 1.

MORE INFORMATION

In Exchange 2000 Server Service Pack 1 (SP1), memory is allocated more reasonably, and the JET database cache shrinks more aggressively to give up some memory when the information store is approaching the virtual address space limit. In Exchange 2000 Server SP1, the amount of virtual address space that is allocated each time that a storage group is mounted is decreased. In Exchange 2000 Server SP1, changes were made to some of the default values that are used to calculate the amount of space that is allocated, so on a two-processor computer, only 12 MB is allocated for each storage group, and on an eight-processor computer, only about 27 MB is allocated. JET does not make any specific allocations based on the number of Messaging Databases (MDBs), or stores, in the storage group, only allocations based on the number of storage groups. However, the store does make some memory allocation for each MDB, but it is a fairly insignificant amount.

The amount of memory for each thread that the store allocates also changes. In Exchange 2000, the store allocated 1 MB for each thread. In Exchange 2000 Server SP1, this is cut in half to 500 kilobyte (KB) for each thread. The store can often run with 300 or more threads, so this change can save a significant amount of memory.

Finally, the algorithm for JET to cut back its database cache size when the virtual memory is approaching the limit is changed. In Exchange 2000, JET backs off only when the available address space is less than 64 MB. In Exchange 2000 Server SP1, JET backs off when the available address space is less than 10 percent of the total. For a computer with 2 GB of virtual address space (for example, a Windows 2000 Server-based computer), JET backs off when the virtual address space is less than 200 MB. On a computer with the /3GB switch, JET backs off when the virtual address space is less than 300 MB. JET's aggressiveness in backing off in Exchange 2000 Server SP1 reduces the chance that the problems that are seen in Exchange 2000 will occur. When the total amount of virtual address space that is available is over 200 MB, it is less likely that much of that space will be so fragmented that it is unusable.

However, when the JET database cache is smaller, performance on the server is decreased. With a smaller JET database cache, disk input/output (I/O) on the MDB drive increase. Also, you might see a slight increase in CPU usage on the server. Finally, client latencies generally increase with a smaller JET database cache.

You should run Exchange 2000 on a Windows 2000 Advanced Server-based computer and set the /3GB switch in the Boot.ini file. You can run Exchange 2000 on a Windows 2000 Server-based computer, but after you approach the virtual address space limit, performance begins to decrease as the JET database cache size shrinks.

IMPORTANT: Note that it is not recommended that you run Windows 2000 Server with anything more than 2 GB of memory (that is, do not use the /3GB switch), when you are running Exchange 2000 because anything over that amount is unused. If the Store.exe process runs out of virtual address space, the memory is all on the server. To get the best use out of the added memory, run Windows 2000 Advanced Server, not Windows 2000 Server. The /3GB switch has advantages only when you use it on a Windows 2000 Advanced Server-based computer.

Modification Type:MinorLast Reviewed:4/25/2005
Keywords:kbbug kberrmsg kbfix KB302254