Asp.net IIS 6 w3wp.exe工作进程占用大量内存-第0代堆大小太大

Asp.net IIS 6 w3wp.exe工作进程占用大量内存-第0代堆大小太大,asp.net,iis,garbage-collection,Asp.net,Iis,Garbage Collection,问题是IIS工作程序会消耗大量内存。在使用VMMAP检查w3wp进程之后,我注意到私有WS中最大的组件是托管堆,即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

问题是IIS工作程序会消耗大量内存。在使用VMMAP检查w3wp进程之后,我注意到私有WS中最大的组件是托管堆,即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个活动会话)

据我所知,第0代堆的大小必须非常小(与二级缓存相当),这是触发GC运行第0代GC的大小

为什么第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.
谢谢大家!

使用WinDbg或任何商业.NET内存分析器,您应该能够查看堆中的对象以及它们是否应该存在

常见原因是没有
StringBuilder
的字符串操作和会话中的大型对象,如
DataTable

在你的案例中找出确切的原因并加以补救