微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我们有一些Windows Server 2003 Service Pack 2上运行的Win32控制台应用程序定期失败,如下所示:

错误1450( ERROR_NO_SYstem_RESOURCES ):“系统资源不足以完成请求的服务”。

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

但是,使用性能监视器来查看空闲系统页表条目计数器时,重新启动时的值大约是36,000,并且不会在我们的应用程序启动时下降 。 我发现很难相信我们的应用程序打开许多大的内存映射文件,对内核页表没有任何影响。 如果我们不能相信柜台,那么testing我们所做的任何系统变化的效果就更困难了。

通过WinAPI打开/closures/pipe理Windows 8应用程序

WSAEventSelect()可以在多个线程中使用以增加套接字限制吗?

cpu使用率100%创build3个线程并使用WSAWaitForMultipleEvents()和WSAEnumNetworkEvents()

使用Windows Temp目录的自解压zip(SFX)Windows程序安装程序的最简单方法是什么?

如果没有Visual Studio,可以用C ++开发windows吗?

一个有希望的知识库文章性能工具不能准确地显示Windows Server 2003中可用的免费系统页表项 ,但它说,问题已在Service Pack 1中得到解决,我们已经在Service Pack 2。

有没有其他人努力或解决这个问题?

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

进一步更新:我们从来没有深究1450错误发生的原因。 但是 ,我们将这些服务器上的操作系统升级到了64位Windows。 这允许现有的32位应用程序(无需重新编译)访问完整的4GB虚拟地址空间,并让那些烦人的Page Table Entries的内核内存区域也尽可能大。 我不认为自从我们有一个1450错误

Windows控制台API

本地计算机上的Windows邮箱最大大小

由EnumDesktops命名的所有桌面无法通过错误2“找不到文件”的OpenDesktop

如何获取Windows 8中活动窗口的标题颜色

在窗口调整事件

你可以尝试windbg命令“!sysptes”来获取系统PTE信息? 我不确定你是否可以通过实时内核调试来做到这一点,你可能必须得到内存转储。

我不知道为什么你认为ERROR_NO_SYstem_RESOURCES只是由于用完了免费的系统页表项而导致的? 据我所知,这种通用的错误代码被用于多种资源类型。 事实上,第一次谷歌命中暗示用尽文件缓存内存也可能导致它。 (在一个XP错误,跳过这种错误模式KB)。

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

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

选项1:你是用Boot.ini中的/ 3GB开关做的。

选项1优点和缺点:

(CONS)这个选项从正常的2 GB内核区域中吸取1 GB的内存 – 因此使操作系统很难满足分页池分配和内核堆栈分配的需求。 所以,一个人可能会认为使用/ 3GB开关将会帮助他们,但是真的这个选项正在使32位的Windows操作系统进入一个缓慢的死亡状态。

(CONS)但是,这给我的应用程序3GB ….错误(因此,这是一个CON)的问题是,只有应用程序已经从供应商重新编译为“/ 3GB开关意识”可以真正使用额外的1 GB 。 因此,/ 3GB开关的全部使用对每个人来说都是一个非常糟糕的问题。

阅读这个链接更好的写作:

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

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

选项2优点和缺点:

(PROS)如果你有超过4GB的内存,这才是唯一的选择。 它通过将完整的应用程序内存占用放在RAM中来欺骗应用程序。 通常情况下,只有应用程序“Working Set”内存在RAM中,其余的应用程序内存要求进入Windows Pagefile。 什么是应用程序总内存要求? – 它被称为“虚拟大小”。

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

问题: “为什么”?

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

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

答案:不是 – 它运行的方式始终是一直运行的,“思考”:它的一部分本身就是生活在RAM中的“工作集”内存,剩余的应用程序内存需求进入Windows Pagefile。

是的,这是翻转好的。

请注意:微软做了一个糟糕的工作告诉任何人有关伟大的Windows操作系统选项。 咄

试试看,并报告给stackoverflow ….

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐