【问题标题】:Limiting the Virtual size of 32 bit server(Windows Server 2003 )限制 32 位服务器的虚拟大小(Windows Server 2003)
【发布时间】:2015-02-15 21:54:37
【问题描述】:

有什么方法可以限制特定进程的虚拟大小,例如W3WP process(32 位,Windows Server 2003)?

我有一个托管在 IIS(C#) 中的服务,它将根据用户操作获取/保留/确认插槽。我在日志中没有收到任何错误。我得到的所有 Http 错误代码都是 200。在服务器停止接受任何进一步的网站请求之前,内存利用率和垃圾收集的大小增加,随后出现内存不足异常。

因为我遇到了 OOM(我们的应用程序出现内存不足异常,这主要是因为应用程序使用了峰值虚拟内存),所以我试图通过减少可用资源来复制 OOM。

【问题讨论】:

  • Google:iis application pool memory limit 似乎包含您的答案。您的问题是非编码题外话。另见其他stackexchange.com/sites
  • xmojmr:IIS 应用程序池在达到某个内存限制时回收,我们可以在 IIS 中设置。
  • W3WP 能为您做什么? “我们正在OOM”是什么意思?错误调用堆栈转储是什么样的?您的应用程序是用哪种编程语言编写的? stackoverflow.com/help/on-topic: "专业系统和网络管理员,请教服务器故障".
  • 我们有一个托管在 IIS(c#) 中的服务,它将根据用户操作获取/保留/确认插槽。我们在日志中没有得到任何错误。我们得到的所有 Http 错误代码都是 200。在服务器停止接受任何进一步的网站请求之前,内存利用率和垃圾收集的大小增加,随后出现内存不足的异常。

标签: .net iis memory-leaks operating-system out-of-memory


【解决方案1】:

我不知道。内存管理(动态堆大小、动态堆栈大小)几乎是自动的。

从操作系统的角度来看,它由Portable Executable (PE) file header 中的字段SizeOfHeapReserveSizeOfStackReserve 驱动。此标头由语言编译器构造并嵌入到*.exe*.dll 文件中。 PE Image Loader 使用标头中的值在创建过程时对其进行初始化。

但是,语言运行时稍后可以决定在创建新线程时使用任何其他值(请参阅MSDN: CreateThread function 中的dwStackSize)或分配新内存堆时(请参阅MSDN: HeapCreate function 中的dwMaximumSize)。

从正在运行的进程 probably would not work 内部更改 System.Diagnostics.Process.MaxWorkingSet

但我找到了一个承诺:

CodeProject: Sebastian Solnice, Set process memory limit with Process Governor, 2013

...进程调控器...允许您对进程提交的内存设置限制。在 Windows 上,提交的内存实际上是进程使用的所有私有内存。我编写了这个工具来测试我的 .NET 应用程序(包括 Web 应用程序)的内存泄漏。有了它,我可以检查它们是否在重负载下不会抛出 OutOfMemoryException

...它是如何工作的? ProcessGovernor 使用系统作业对象将约束应用于流程...

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多