分类: WINDOWS
2008-03-20 15:29:52
元旦前,因业务需要,把一个业务系统切换到一台装32位的windows server 2003 Enterprise Edition系统的服务器,配了4G内存,一直比较稳定.
但这两天,这系统不停地出错,检查服务器发现,内存已占用了2.5G,单sqlserver.exe进程都占用了2G的内存.随着业务的增加,sql的数据越来越大,但SQL占用的内存却不会增加,还不时出错,这是什么原因呢?
带着这疑问,上网搜索了一通.原来在典型情况是, Windows 2000 或 Windows Server 2003 下运行的进程最多可以访问 2 GB 的内存地址空间.而这时的SQL已占用2G的内存,无内存可能,不出错才怪.那应该怎么配置才能让系统的进程能使用大于2G的内存呢?
继续上网搜索,从微软的网站上找到"在其他情况下,必须在 Boot.ini 文件中使用 /PAE 开关来利用大于 4GB 的内存".
例如:
[boot loader]
redirect=UseBiosSettings
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /3GB /redirect /NoExecute=OptOut
下面是微软网站的文章:
##############################################
概要
本文介绍物理地址扩展 (PAE) 和地址窗口化扩展 (AWE) 并解释它们如何协同工作。本文还将讨论超出 32 位操作系统所固有的 4 GB 范围的内存使用限制。
回到顶端
更多信息
PAE 提高了 IA32 处理器处理大于 4 GB 的物理内存的能力。下列操作系统可以通过 PAE 来利用大于 4 GB 的物理内存:? Microsoft Windows 2000 Advanced Server
? Microsoft Windows 2000 Datacenter Server
? Microsoft Windows Server 2003
? Microsoft Windows Server 2003 Datacenter Edition
若要启用 PAE,需要在 Boot.ini 文件中使用 /PAE 参数。
注意:在 Windows Server 2003 中,仅当服务器使用热插拔内存设备时,才会自动启用 PAE。在这种情况下,不需要在配置为使用热插拔内存设备的系统上使用 /PAE 开关。在其他情况下,必须在 Boot.ini 文件中使用 /PAE 开关来利用大于 4GB 的内存。
典型情况是,在 Windows 2000 或 Windows Server 2003 下运行的进程最多可以访问 2 GB 的内存地址空间(假设未使用 /3GB 参数),其中一些内存是物理内存,另一些是虚拟内存。运行的程序越多(因而进程也越多),占用的内存地址空间也就越接近 2 GB 这一最大值。
当出现这种情况时,分页进程将显著增加并且会对性能产生负面影响。Windows 2000 和 Windows Server 2003 内存管理器使用 PAE 向程序提供更多的物理内存。这会降低对交换页面文件内存的需要,从而提高了性能。程序本身并不知道实际的内存大小。所有的内存管理和 PAE 内存分配都由内存管理器处理,与运行的程序无关。
当使用 /3GB 参数时,上述信息对于运行的程序有效。要求 3 GB 内存的程序更有可能让其所需的内存有更多部分在物理内存中,而不是在分页的虚拟内存中。这将增强那些能够使用 /3GB 参数的程序的性能。但例外情况是当 /3GB 参数与 /PAE 参数一起使用时。在这种情况下,操作系统将不使用任何超过 16 GB 的内存。此行为是由内核虚拟内存空间考虑导致的。因此,如果系统使用 Boot.ini 文件中的 /3GB 项重新启动,并且系统的物理内存超过 16 GB,则操作系统不使用额外的物理随机存取内存 (RAM)。重新启动计算机时如果不使用 /3GB 开关,将能够使用所有的物理内存。
AWE 是内存管理器功能的一套应用程序编程接口 (API),它使程序能够寻址更多内存 — 超过标准 32 位寻址的 4 GB 内存空间。AWE 使程序能够将物理内存保留为非分页内存,然后将非分页内存部分动态映射到程序的内存工作集。此过程使内存密集型程序(如大型数据库系统)能够为数据保留大量的物理内存,而不必交换分页文件以供使用。相反,数据在工作集中进行交换,并且保留的内存超过 4 GB 范围。此外,超出 4 GB 的内存范围对内存管理器是公开的,并且 AWE 通过 PAE 发挥作用。没有 PAE,AWE 就无法保留超出 4 GB 的内存。
以下是一个 Boot.ini 文件的示例,其中已添加了 PAE 开关:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003,
警告:Boot.ini 文件的内容根据您的配置而异。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
317526 () 如何在 Windows Server 2003 中编辑 Boot.ini 文件
总之,PAE 是 Windows 2000 和 Windows Server 2003 内存管理器的一项功能,它为请求内存的程序提供了更多物理内存。程序并不知道它正使用的内存中有些在大于 4 GB 的范围内,正如程序不知道它请求的内存实际上是在页面文件中一样。
AWE 是一个 API 集,它使程序能够保留大内存块。保留的内存是非分页的,并且只可以由该程序来使用。 有关 AWE 和 PAE 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
268363 () Windows 2000 中的 Intel 物理地址扩展 (PAE)
有关更多信息,请访问下面的 Microsoft 网站:
(en-us,SQL.80).aspx ((en-us,SQL.80).aspx)
(en-us).aspx ((en-us).aspx)
如果向系统添加更多内存,BIOS 可能会认出安装在服务器中的全部物理 RAM,而 Windows 将只能认出部分 RAM。如果服务器具有启用的冗余内存功能或内存镜像功能,则全部剩余内存可能对 Windows 都不可见。冗余内存在某个内存块故障时为系统提供一个故障转移的内存块。内存镜像将内存块拆分为一个镜像集。两种功能都在 BIOS 中启用或禁用,而无法通过 Windows 访问。要修改这些功能的设置,您可能必须参考系统用户手册或 OEM 网站。另外,您可能必须联系硬件供应商。
例如,如果正在运行的系统安装了 4GB 的 RAM,随后又添加了另外 4GB 的 RAM,Windows 可能只识别出 4GB 或 6GB 的物理内存,而不是全部的 8GB。冗余内存功能或内存镜像功能可能在您未知的情况下就在新内存块上启用。这些症状类似于未将 /PAE 开关添加到 Boot.ini 文件时的症状。