在 Exchange Server 2003 中优化内存使用

 

上一次修改主题: 2005-05-25

如果运行 Microsoft Exchange Server 2003 的服务器上安装有 1 GB 或更多的物理内存 (RAM),则必须确保 Exchange 2003 能有效地使用该内存。Exchange Server 2003 中的 Exchange 信息存储 (Store.exe) 进程具有有限的可寻址内存量,它与硬件配置、数据库数及服务器上的用户数无关。此内存量称为虚拟地址空间。大多数情况下,对信息存储的虚拟地址空间的使用决定了 Exchange Server 2003 邮箱服务器的整体性能和可伸缩性。对于中小型服务器,Exchange Server 2003 自动进行最佳权衡。但是,对于大型服务器,可能需要手动调整部分或全部如下所述的调整参数。

监视内存使用

可以使用“事件查看器”和“性能日志和警报”来监视 Exchange Server 的虚拟内存问题。当最大可用虚拟内存块减小到 32 MB 时,应用程序日志中会出现事件 ID 9582 的警告。如果看到此警告,应该在下次有机会时重新启动 Exchange 存储进程。如果最大可用块减小到 16 MB,会再次出现事件 ID 9582 的错误;这意味着服务器的运行可能失败,应该尽快重新启动服务器。如果对上述事件没有做出响应,可能会导致个别邮件投递和 IMAIL 转换失败(事件 ID 12800)。

有关详细说明,请参阅如何监视 Exchange Server 的内存使用

如果有迹象表明,服务器的虚拟地址空间较少,请调整下列设置。如果这些设置没有针对 Exchange 进行优化,则在应用程序事件日志中会出现事件 9665。

事件 9665

Exchange 在存储进程启动时执行最佳内存配置检查。如果内存设置不是最佳设置,事件查看器中将出现事件 9665。在下列情况下会出现此消息:

  • 服务器运行的是 Windows 2000 Server,并且注册表中设置的值不在 24,000 至 31,000 范围之内。
  • 服务器的内存为 1 GB 或更多,但没有 /3GB 开关。
  • 服务器运行的是 Windows Server 2003,配有 1 GB 或更多的内存,并且已设置 /3GB 开关,但没有 /USERVA 开关或未将其设置为 3030。

如果您确信您的服务器已进行最佳配置,而且不希望在日志中记录事件 9665,则可以抑制事件 9665 的日志记录。有关详细说明,请参阅如何抑制内存配置通知事件

设置 /3GB 开关

默认情况下,Windows 2000 Advanced Server 和 Windows Server 2003 为 Store.exe 等用户模式进程分配 2 GB 的虚拟地址空间。如果服务器有 1 GB 或更多的物理内存,请在 Boot.ini 文件中设置 /3GB 开关,以增加虚拟地址空间。

有关如何设置 /3GB 开关的详细说明,请参阅如何在 Windows 中设置 /3GB 启动开关

设置 /USERVA 开关和 SystemPages 注册表值

如果服务器运行的是 Windows 2000,则应该将 SystemPages 注册表值设置在 24,000 至 31,000 范围内。如果服务器运行的是 Windows Server 2003,请将 SystemPages 值设置为零,并在 Boot.ini 文件中设置 /USERVA=3030 启动开关。通过这些设置,就可以在服务器上输入更多的系统页表条目,这对于向上扩展的系统是很关键的。

/USERVA 开关是 Windows Server 2003 中的新增内容。其用途是对用户模式进程和内核模式进程之间的虚拟地址空间分配提供更好的控制。仅应将 /USERVA 开关用于支持它的应用程序,如 Exchange Server 2003,并仅应使用这些应用程序支持的特定值。如果将 /USERVA 用于 Exchange Server 2003 系统,它应该总是等于 3030(如 /USERVA=3030)。此值导致将额外的 40 MB 分配给操作系统,并使您可以添加更多的用户,而无须占用所有的可用系统资源。

有关如何在 Windows 2000 中配置 SystemPages 注册表值的详细说明,请参阅如何增加 Windows 2000 中的系统页表条目

有关如何配置 /USERVA 启动开关的详细说明,请参阅如何在 Windows 中设置 /USERVA 启动开关

设置 HeapDeCommitFreeBlockThreshold 注册表值

HeapDeCommitFreeBlockThreshold 注册表值控制着堆管理器回收(或释放)内存之前需要的可用空间量。默认值是零,这意味着,堆管理器回收变为可用的所有 4 KB 页。随着时间的推移,虚拟地址空间会分成许多碎片。在物理内存为 1 GB 或更多的服务器上,应将此注册表项设置为更高的值,以减少碎片。

有关如何设置 HeapDeCommitFreeBlockThreshold 注册表值的详细说明,请参阅如何设置 HeapDeCommitFreeBlockThreshold 注册表值