限制32位服务器的虚拟大小(Windows Server 2003)

时间:2014-12-17 11:02:20

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

我是否可以限制特定流程的虚拟大小,例如W3WP process(32位,Windows Server 2003)?

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

因为我正在获得OOM(我们的应用程序内存异常,这主要是因为应用程序使用的峰值虚拟内存),我试图通过减少可用资源来复制OOM。

1 个答案:

答案 0 :(得分:1)

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

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

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

从正在运行的进程MSDN: HeapCreate function内部更改OutOfMemoryException

但我已经找到了承诺:

  

probably would not work

     

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

     

......它是如何运作的?流程调控器使用系统作业对象将约束应用于流程...

另见: