【问题标题】:When does a Windows process run out of memory?Windows 进程何时耗尽内存?
【发布时间】:2010-09-17 03:28:48
【问题描述】:

在 Windows Server 2003, Enterprise Edition, SP2 下(/3GB 开关未启用)

据我了解,我可能错了,进程的最大可寻址内存为 4GB。

那是 2GB 的私有字节和 2GB 的虚拟字节吗?

当达到私有字节限制或虚拟字节限制时,是否会出现“内存不足”错误?

【问题讨论】:

    标签: memory windows-server-2003


    【解决方案1】:

    从某种意义上说,进程的最大地址空间是4GB是正确的。对于每个进程,操作系统占用了一半的地址空间。这可以通过 3GB 开关进行更改,但可能会导致系统不稳定。因此,我们剩下 2GB 的可寻址内存供进程自己使用。好吧,不完全是。事实证明,这个空间的一部分被其他东西占用了,例如 DLL 和其他公共代码。作为程序员,您实际可用的内存约为 1.5GB - 1.7GB。

    我不确定如何处理意外超出此限制的情况,但我知道由于这个原因在大型多人游戏地图中崩溃的游戏。另一件需要注意的是,除非启用 /LARGEADDRESSAWARE:YES 链接器标志,否则 32 位程序在 64 位系统上不能使用超过 2GB 的地址空间。

    【讨论】:

      【解决方案2】:

      Mark Russinovich 就此开始了一系列帖子。 Pushing the Limits of Windows: Physical Memory

      虽然 4GB 是 32 位客户端 SKU 的许可限制,但有效限制实际上更低,并且取决于系统的芯片组和连接的设备。原因是物理地址映射不仅包括 RAM,还包括设备内存,x86 和 x64 系统将所有设备内存映射到 4GB 地址边界以下,以保持与不知道如何处理的 32 位操作系统兼容地址大于 4GB。如果一个系统有 4GB RAM 和设备(如视频、音频和网络适配器)在其设备内存中实现窗口的总和为 500MB,则 4GB RAM 中的 500MB 将位于 4GB 地址边界之上。

      【讨论】:

        【解决方案3】:

        在 32 位 Windows 平台上,您总共只能访问 2Gb 的内存(没有 3Gb 开关)。

        您可以在 64 位操作系统上运行多个 32 位虚拟机,这样如果您的计算机超过 4Gb,每个应用程序都可以访问尽可能多的内存。

        很多人刚开始遇到这些障碍,我想如果您的应用程序使用 .net 或 Java 会更容易,因为虚拟机在 64 位操作系统上很高兴地达到了 32Gb 的内存。

        【讨论】:

          【解决方案4】:

          在 32 位上,如果有足够的物理内存和磁盘空间用于虚拟内存,内存会用完大约 3GB,因为内核为自己保留了 0xC0000000 以上的地址空间。在运行 64 位应用程序的 64 位内核上,限制为 8TB。

          更多详情,请查看MSDN - Memory Limits for Windows Releases

          【讨论】:

            【解决方案5】:

            32 位机器的最大可寻址内存为 4GB,对于 64 位机器,您可以处理更多负载。 (虽然有些32bit的机器有扩展系统可以访问更多,但我认为这不值得打扰或考虑使用)。

            达到虚拟限制时会出现内存不足错误。在 Windows Server 2003 上,任务管理器会在标有“提交费用限制”的性能选项卡上告诉您限制。

            【讨论】:

              猜你喜欢
              • 2014-03-17
              • 1970-01-01
              • 1970-01-01
              • 2015-08-23
              • 2012-11-10
              • 2012-08-19
              • 2011-02-09
              • 2015-10-01
              • 2018-12-11
              相关资源
              最近更新 更多