UnmapViewOfFile 函数中出现性能下降问题

针对 Windows XP 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Windows XP 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

针对 Windows Server 2003 的支持已于 2015 年 7 月 14 日终止。

Microsoft 已于 2015 年 7 月 14 日终止了对于 Windows Server 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

本文已归档。它按“原样”提供,并且不再更新。
症状
如果程序使用的映射文件视图大于 500 MB,则性能可能会显著下降。映射文件视图通常用于在两个或更多个进程之间共享信息。性能下降出现在 UnmapViewOfFile 函数中。
原因
在 Microsoft Windows Server 2003 或 Microsoft Windows XP Service Pack 1 (SP1) 中,如果程序映射的文件视图大于 500 MB,则会出现此问题。
解决方案

Windows XP Service Pack 1

Service Pack 信息

要解决此问题,请获取最新的 Windows XP Service Pack。有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322389 如何获取最新的 Windows XP Service Pack

修补程序信息

Microsoft 目前提供了一个受支持的修补程序。但是,此修补程序仅用于修复本文所述的问题。请仅将此修补程序应用于出现这一特定问题的系统。此修补程序可能还会接受进一步的测试。因此,如果这个问题没有给您造成严重的影响,我们建议您等待包含此修补程序的下一个 Service Pack。

要解决此问题,请向 Microsoft 在线客户服务提交请求以获取该修补程序。要提交联机请求以获取该修补程序,请访问下面的 Microsoft 网站:注意:如果发生其他问题或需要进行任何疑难解答,则您可能需要创建单独的服务请求。对于此特定修补程序无法解决的其他支持问题和事项,将照常收取支持费用。要创建单独的服务请求,请访问下面的 Microsoft 网站: 此修补程序的英文版具有下表中列出的文件属性(或更新的文件属性)。这些文件的日期和时间按协调世界时 (UTC) 列出。当您查看文件信息时,相应的时间将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用“控制面板”中“日期和时间”工具中的“时区”选项卡。
日期         时间      版本           大小       文件名        平台 ----------------------------------------------------------------------- 28-Feb-2003  16:17    5.1.2600.1178   1,895,424  Ntkrnlmp.exe  i386 28-Feb-2003  16:17    5.1.2600.1178   1,951,232  Ntkrnlpa.exe  i386 28-Feb-2003  16:17    5.1.2600.1178   1,923,584  Ntkrpamp.exe  i386 28-Feb-2003  16:17    5.1.2600.1178   1,927,424  Ntoskrnl.exe  i386 28-Feb-2003  16:17    5.1.2600.1178   5,826,432  Ntkrnlmp.exe  ia-64 28-Feb-2003  16:17    5.1.2600.1178   5,736,704  Ntoskrnl.exe  ia-64

Windows Server 2003

虽然该问题可通过对 UnmapViewOfFile 函数的调用表现出来,但需要更改的代码却深深嵌入在内核中。由于更改核心内存管理函数十分危险,因此将不再针对 Windows Server 2003 提供相应的修补程序。Windows Server 2003 的代码修补程序将在 Windows Server 2003 Service Pack 1 中提供。

受此问题影响的程序可使用性能监视器确定。为此,请按照下列步骤操作:
  1. 按照 Microsoft 知识库文章 248345 中介绍的步骤或使用性能监视器向导创建性能监视器日志。
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    248345如何使用 Windows 中的系统监视器创建日志
  2. 记录系统繁忙时的服务器活动。
  3. 停止性能监视器日志,然后查看“进程性能”对象下的“工作集大小峰值”。找出工作集大小超过 500 MB 的所有进程。
  4. 从“进程性能”对象下相应的“专用字节”项中减去在步骤 3 中找出的每个进程的工作集大小值。
如果进程的工作集比专用字节大 500 MB 以上,则说明程序可能正在使用较大的映射文件视图,因而可能会受到由于调用 UnmapViewOfFile 函数而引起的性能下降的影响。 如果这些程序偶尔停止响应或在较长的时间段内没有响应,则可能需要进行调试分析或查看代码,以验证这些程序是否受到此问题的影响。

如果程序确实受到此性能问题的影响,则在获得 Windows Server 2003 Service Pack 1 之前,可以对 Windows Server 2003 应用以下编码替代方法:
  1. 在运行于 Windows Server 2003 中的程序中,删除对 UnmapViewOfFile 函数的调用。只有进程必须将内存的多个扇区映射到同一内存地址时,才需要调用此函数。当最后一个线程退出后,操作系统将清空共享扇区。
  2. 如果必须调用 UnmapViewViewOfFile 函数,请编写新程序来创建一个作业对象 (CreateJobObject)。通过设置 _JOBOBJECT_BASIC_LIMIT_INFORMATION 参数中的 MaximumWorkingSetSize 属性,使用 SetInformationJobObject 函数将最大工作集大小设置为 500 MB 左右。(使用 /3GB 开关时,此设置为 24 MB。)将所有必需的进程与此作业对象关联。
此程序应该会在必需的程序已经启动后运行。如果其中一个进程重新启动,则必须重新运行此程序。在限制进程工作集大小的情况下,将不会出现显著的性能下降。如果系统上有大量可用的 RAM,从进程工作集中删除的页面将被置于备用列表中。如果出现页面错误,则说明程序可能正由物理内存中的备用列表中的页面提供服务。应进行性能基准测试,以确定此替代方法的实际性能影响。

状态
Microsoft 已经确认这是在“这篇文章的信息适用于:”部分中列出的 Microsoft 产品中存在的问题。 此问题最早在 Microsoft Windows XP Service Pack 2 中得到了解决。 Microsoft 计划在 Windows Server 2003 Service Pack 1 中修复该问题。
P4, pentium 4, pentium IV, multiproc, dualproc, hyperthreading, kernel, slow performance, office, word, MapViewOfFile, 100% CPU, high CPU usage, delays of 4 seconds
属性

文章 ID:815227 - 上次审阅时间:12/08/2015 02:07:47 - 修订版本: 6.2

Microsoft Windows Server 2003 Datacenter Edition, Microsoft Windows Server 2003 Enterprise Edition, Microsoft Windows Server 2003 Standard Edition, Microsoft Windows Server 2003 Web Edition, Microsoft Windows XP Home Edition, Microsoft Windows XP Professional Edition

  • kbnosurvey kbarchive kbtshoot kbbug kbfix kbqfe kbenv kbwinxpsp2fix kbwinxppresp2fix kbhotfixserver KB815227
反馈