Asp.net IIS工作进程使用大量内存?
我的服务器上有一个网站,我的IIS工作进程始终使用4GB RAM。我应该检查什么Asp.net IIS工作进程使用大量内存?,asp.net,iis,memory,worker-process,Asp.net,Iis,Memory,Worker Process,我的服务器上有一个网站,我的IIS工作进程始终使用4GB RAM。我应该检查什么 c:\windows\system32\inetsrv\w3wp.exe 检查中有关内存瓶颈故障排除的部分如果您可以访问源代码,则可能需要检查实现IDisposable的任何对象是否在中使用语句引用,或者在使用完它们后是否被正确处理 使用是一种C#构造,但基本思想是,当您完成时,您正在释放资源 另一件需要检查的事情是,大型对象被置于“进程中”会话状态或缓存中。更多详细信息肯定会有所帮助。应用程序池中运行了多少个应
c:\windows\system32\inetsrv\w3wp.exe
检查中有关内存瓶颈故障排除的部分如果您可以访问源代码,则可能需要检查实现IDisposable的任何对象是否在
中使用
语句引用,或者在使用完它们后是否被正确处理
使用
是一种C#构造,但基本思想是,当您完成时,您正在释放资源
另一件需要检查的事情是,大型对象被置于“进程中”会话状态或缓存中。更多详细信息肯定会有所帮助。应用程序池中运行了多少个应用程序?池中是否有ASP.NET应用程序
如果您正在运行ASP.NET,请仔细查看会话和缓存变量中存储的内容。使用PerfMon检查正在发生的第0、1和2代集合的数量。小心将UI元素存储在会话状态或缓存中,因为这将阻止收集整个页面实例和页面实例的所有子级。最后,检查您是否正在进行大量的字符串连接。这会导致大量对象实例化,因为.NET字符串是不可变的。请考虑改用StringBuilder。我会检查前面提到的Gulzar中的CLR调优部分 正如其他海报所指出的,任何实现
IDispose
的对象在完成时都应该调用Dispose()
,最好使用using
构造
启动perfmon.exe
并添加以下计数器:
- 进程\专用字节
- .NET CLR内存#所有堆中的字节
- 进程\工作集
- .NET CLR内存\大对象堆大小
正如其他人指出的,此问题的常见原因是资源泄漏,win2k3服务器和IIS6也存在已知问题。请创建w3wp进程的小型转储,并使用WinDbg查看内存中有哪些对象。这就是微软IIS支持团队在遇到类似问题时所做的。我认为这就是问题所在。。。但我已经有SP2了(是的,但是如果字符串在大型对象堆上,如果我没有弄错的话,它们将仅在第2代收集期间收集。