重庆思庄Oracle、Redhat认证学习论坛

标题: 运行大量程序时出现“Out of Memory”(内存不足)错误信息 [打印本页]

作者: 郑全    时间: 2013-12-11 16:15
标题: 运行大量程序时出现“Out of Memory”(内存不足)错误信息

运行大量程序时出现“Out of Memory”(内存不足)错误信息

 
 

症状

当您运行大量基于 Windows 的程序时,如果尝试启动新程序或尝试使用已在运行的程序时会出现“Out of Memory”(内存不足)错误信息,即使您拥有充足可用的物理内存和页面文件内存也是如此。

原因

如果 WIN32 子系统中的桌面堆栈用尽,则会发生此问题。

注意此问题更常出现在 Windows NT 3.5 环境中,因为该环境中桌面堆栈的默认大小为 512K。在 Windows NT 3.1 环境中,默认值为 3072K。减少默认值可提高性能。

解决方案

重要说明 此部分、方法或任务包含有关如何修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中备份和还原注册表
若要我们为您解决该问题,请转到“帮我修复此问题”部分。如果您想亲自解决该问题,请转到“我自己修复此问题”部分。

帮我修复此问题



若要自动修复此问题,请单击“修复此问题”按钮或链接。单击“文件下载”对话框中的“运行”,并按照修复此问题向导中的步骤执行操作。

修复此问题
Microsoft Fix it 50496

注意
  • 该向导可能只有英文版本。但是自动修复功能同样适用于其他语言版本的 Windows。
  • 如果所使用的计算机中并未出现此问题,则可将“修复此问题”解决方案保存至闪存驱动器或 CD 中,然后在出现此问题的计算机上运行该解决方案。
  • 如果此方法仍然无法解决问题,请增加计算机的内存。

接下来,请您转到“此方法是否已修复问题?”部分。



我自己修复此问题

若要解决此问题,请增加桌面堆栈的大小:
  1. 运行注册表编辑器 (Regedt32.exe)。
  2. HKEY_LOCAL_MACHINE
    子树,转到以下项:
    \System\CurrentControlSet\Control\Session Manager\SubSystems
  3. 选择“Windows”值。
  4. “编辑”菜单中,选择“字符串”
  5. 增加 SharedSection 参数。

    对于 Windows NT:
    SharedSection 使用以下格式指定系统和桌面堆栈:
    SharedSection=xxxx,yyyy
    yyyy 数字后面添加“,256”或“,512”。

    对于 Windows 2000、Windows XP 和 Windows Server 2003:
    SharedSection 使用以下格式指定系统和桌面堆栈:
    SharedSection=xxxx,yyyy,zzzz
    对于 32 位操作系统,将 yyyy 值提高到“12288”;
    zzzz 值提高到“1024”。
    对于 64 位操作系统,将 yyyy 值提高到“20480”;
    zzzz 值提高到“1024”。

更多信息

Windows NT 对桌面上运行的所有基于 Windows 的程序使用特殊的内存堆栈。桌面堆栈用于所有对象(窗口、菜单、笔、图标等)。运行大量基于 Windows 的程序时,此堆栈可能内存不足。如果没有足够的内存来满足分配请求,则系统通常返回一个错误,通知用户运行时内存不足。某些程序无法正确处理失败,在某些情况下,可能没有足够的内存来创建错误消息对话框。结果,请求的操作失败且没有任何提示。

使用注册表编辑器查看 SharedSection 注册表项时,该项是一个长字符串。此项的默认值如下。
%SystemRoot%\system32\csrss.exe
ObjectDirectory=\Windows
SharedSection=1024,3072,512
Windows=On
SubSystemType=Windows
ServerDll=basesrv,1
ServerDll=winsrv:GdiServerDllInitialization,4
ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off
MaxRequestThreads=16
				


第一个 SharedSection 值 (1024) 用于定义所有桌面的常用堆栈大小。这包含全局句柄表(窗口句柄是在计算机范围内是唯一的)和共享系统设置(如 SystemMetrics)。通常不需要更改此值。

第二个 SharedSection 值 (3072) 用于控制与交互式窗口站(用于 Windows 对象)关联的桌面堆栈的大小。此静态值用于防止操作错误的应用程序消耗过多资源。由于桌面堆栈被映射到每个进程的地址空间中,因此不应将此值设置为任意高的值(因为这会降低性能),而只应将该值提高到足以运行所有所需应用程序的程度。

第三个 SharedSection 值 (512) 用于控制与“非交互式”窗口站相关联的每个桌面的桌面堆栈的大小。如果此值不存在,则非交互式窗口站的桌面堆栈大小将与交互式窗口站的指定大小(第二个 SharedSection 值)相同。
有关 SharedSection 注册表项参数的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
184802 PRB:User32.dll 或 Kernel32.dll 无法初始化

此方法是否已修复问题?

  • 检查该问题是否已修复。如果该问题已修复,则您已完成此部分。如果该问题未修复,则可以联系技术支持人员
  • 非常感谢您提供反馈意见。若要提供反馈意见或报告使用此解决方案出现的任何问题,请在“帮我修复此问题 ”博客中留言或向我们发送电子邮件

属性

文章编号: 126962 - 最后修改: 2010年11月10日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Workstation 3.5
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows NT Workstation 4.0 开发员版
  • Microsoft Windows NT Server 3.51
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Advanced Server 3.1
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Web Edition
关键字: 
kbenv kbmsifixme kbfixme KB126962





欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2