我是否可以限制特定流程的虚拟大小,例如W3WP process(32位,Windows Server 2003)?
我有一个托管在IIS(C#)中的服务,它将根据用户操作获取/保留/确认插槽。我没有在日志中收到任何错误。我得到的所有Http错误代码都是200.在服务器停止接收任何进一步的网站请求之前,内存利用率和垃圾收集量增加,然后出现内存不足异常。
因为我正在获得OOM(我们的应用程序内存异常,这主要是因为应用程序使用的峰值虚拟内存),我试图通过减少可用资源来复制OOM。
答案 0 :(得分:1)
我不知道。内存管理(动态堆大小,动态堆栈大小)几乎是自动的。
从操作系统的角度来看,它由Portable Executable (PE) file header中的字段SizeOfHeapReserve
和SizeOfStackReserve
驱动。此标头由语言编译器构造并嵌入到*.exe
或*.dll
文件中。标题中的值由PE Image Loader用于在创建过程时初始化过程。
但是,语言运行时稍后可以决定在创建新线程时使用任何其他值(请参阅MSDN: CreateThread function中的dwStackSize
)或分配新的内存堆(请参阅dwMaximumSize
System.Diagnostics.Process.MaxWorkingSet
3}})。
从正在运行的进程MSDN: HeapCreate function内部更改OutOfMemoryException
。
但我已经找到了承诺:
... 流程管理器 ...允许您为流程提交的内存设置限制。在Windows上,提交的内存实际上是进程使用的所有私有内存。我编写了这个工具来测试我的.NET应用程序(包括Web应用程序)是否存在内存泄漏。有了它,我可以检查是否在重载下它们不会抛出{{1}}
......它是如何运作的?流程调控器使用系统作业对象将约束应用于流程...
另见: