Windows Server 2003 SP2是否说明了自由系统页表条目的真相?

时间:2008-09-12 14:16:36

标签: windows winapi windows-server-2003

我们在Windows Server 2003 Service Pack 2上运行了一些Win32控制台应用程序,这些应用程序经常失败:

  

错误1450(ERROR_NO_SYSTEM_RESOURCES):“系统资源不足,无法完成所请求的服务。”

我们发现的所有文档都表明它与免费系统页表条目的数量相关联。我们在这些机器上有16GB RAM,并使用/3GB操作系统开关将Windows内核压缩到1GB,并允许我们的进程访问3GB的地址空间。这大大减少了自由系统页表条目的总数,因此结合我们大量使用MapViewOfFile(),内核页表条目用完也就不足为奇了。

但是,使用性能监视器查看“免费系统页面表条目”计数器时,重新启动时值约为36,000,启动应用程序时不会停止。我发现很难相信我们的应用程序打开了许多大型内存映射文件,对内核页表没有任何影响。如果我们无法相信计数器,那么测试我们所做的任何系统更改的效果要困难得多。

有一篇很有前途的知识库文章The Performance tool does not accurately show the available Free System Page Table entries in Windows Server 2003,但是它说Service Pack 1中已经修复了问题,我们已经在Service Pack 2上了。

还有其他人在努力解决这个问题吗?

更新:我已经检查了windbg中的sysptes(调试内核),并且该值与性能计数器匹配,大约为36,000。我想这很可能意味着确实有很多免费页面表条目,Windows 说实话。如果PTE没有用完,它确实留下了为什么我们得到1450错误的问题。

进一步更新:我们从未明确了解1450错误发生的原因。 然而,我们将这些服务器上的操作系统升级到64位Windows。这允许现有的32位应用程序(无需重新编译)访问完整的4GB虚拟地址空间,并使内核内存区域与那些讨厌的页面表项一样大。我不认为自那以后我们有1450错误。

3 个答案:

答案 0 :(得分:1)

你能试试windbg命令“!sysptes”来获取系统PTE信息吗?我不确定你是否可以通过实时内核调试来实现这一点,你可能需要进行内存转储。

答案 1 :(得分:0)

我不确定为什么你假设ERROR_NO_SYSTEM_RESOURCES只是因为 而导致免费的系统页表条目耗尽?据我所知,这种通用错误代码用于多种资源类型。事实上,谷歌的第一次打击表明,文件缓存内存不足也可能导致它崩溃。 (XP错误上的KB,导致此错误模式跳闸)。

在你的情况下,我会检查“处理计数”。另一个可能的问题是地址空间碎片。如果要创建1GB文件映射视图,则需要1GB的可用地址空间,并且必须是连续的。如果您映射1GB文件,800 MB文件和1GB文件,关闭800MB文件并打开900MB文件,900MB文件可能不适合左侧的孔。

答案 2 :(得分:0)

MS 2种方式允许32位操作系统“处理”具有4 GB或更多RAM的硬件。

选项1:你在Boot.ini中使用/ 3GB Switch做了什么。

选项1优点和缺点:

(CONS)此选项从正常的2 GB内核区域中吸取1 GB - 因此使操作系统难以满足分页池分配和内核堆栈分配的需求。所以一个人可能会认为使用/ 3GB开关会帮助他们,但实际上这个选项会使32位Window OS陷入缓慢的死亡。

(CONS)但是,这给了我的应用程序3GB ....错误(因此这是一个CON)问题是,只有从供应商重新编译的应用程序才是“/ 3GB切换知道“真的可以使用额外的1 GB。因此,/ 3GB Switch的全部使用对每个人来说都是一个非常糟糕的J.O.K.E.

阅读此链接以获得更好的写作:

http://blogs.technet.com/askperf/archive/2007/03/23/memory-management-demystifying-3gb.aspx

选项2:使用Boot.ini中的/ PAE开关。

选项2优点和缺点:

(PROS)如果您拥有超过4GB的RAM,这真的是唯一的选择。它通过将完整的应用程序内存占用空间放在RAM中来欺骗应用程序。通常,只有应用程序“工作集”内存在RAM中,剩余的应用程序内存要求进入Windows页面文件。什么是应用程序总内存要求? - 它称为“虚拟大小”。

在我的世界里,我有一个基于Java的IBM产品,我可以处理它。运行“应用程序”的服务器具有16 GB的RAM。我只需添加/ PAE开关并观察(感谢sysinternals Processes Explorer)应用程序分页请求从每秒200 KB到每秒4 MB。

问题:“为什么”?

答案:整个应用程序都在RAM中。

问题:“应用程序是否知道它已完全在RAM中运行?

答案:否 - 它运行的方式与它始终运行的方式相同,“思考”它本身就是生活在RAM中的“工作集”内存和其余的应用程序内存要求进入Windows页面文件。

是的,这就是好转。

请注意:微软在向任何人讲述伟大的Windows操作系统选项方面做得很差。咄

尝试并报告回stackoverflow ....