问题是IIS工作程序消耗了大量内存。在使用VMMAP检查w3wp进程后,我注意到Private WS的bigest组件是Managed Heap,即GC内存。
此外,我使用性能监控检查了w3wp流程,结果如下:
# Bytes in All Heaps : 32MB
# Gen 0 Collections : 4
# Gen 1 Collections : 3
# Gen 2 Collections : 2
Gen 0 Heap Size 570MB
Gen 1 Heap Size 5MB
Gen 2 Heap Size 26MB
Active Sessions : 4
每次新会话时,Gen 0堆大小都会增加。最高峰是我有4个活动会话(~570MB)。比我有6个会话时,它减少到~250MB,然后再次增加,直到应用程序池被回收(~8-9个活动会话)。
据我所知,Gen 0堆大小必须非常小(与L2 Cache相当),这是触发GC运行Gen 0 GC的大小。
为什么Gen 0堆大小如此之大?
我有以下环境:
IIS 6.0
The application is Asp.Net WebForms
Application Pool is restricted to 700Mb, and it gets recycled when
I have ~8-9 active sessions, so all session are lost.
.Net Framework v4.0.3
64 bit version of w3wp worker.
I also inspected the application memory using CLR profiler and the
number of Bytes in all heaps are 10-60 mb depending on number of active sessions.
谢谢!
答案 0 :(得分:1)
http://msdn.microsoft.com/en-us/library/ee817660.aspx
使用WinDbg或任何商业.NET内存分析器,您应该能够查看堆中的对象以及它们是否应该在那里。
常见原因是没有StringBuilder
的字符串操作和会话中的大对象,例如DataTable
。
找出您案件的确切原因并予以纠正。