Far*_*ukh 2 memory asp.net iis-7 exception
问题出在内存管理上,因为我一直收到"Out of Memory exception".以下是我们遇到问题的情景:
请注意:1.站点/应用程序是在ASP.Net中开发的,并上传到具有以下规格的服务器上: - Windows Server 2008(R2)标准版 - Intel Xeon L5520@2.27GHz 2.27GHz - RAM = 8GB - 系统类型= 64位
该应用程序是基于事件管理的Web应用程序,其中的要求包括在Sessions等中保存大量数据(如果相关,请提及此内容)
应用程序/站点正常工作,直到我们:
的细节:
在web.config中有什么方法可以将这个问题调试到核心并找到解决方案.您能否提供我们可以进一步调查此问题的链接/帮助?
最好的问候,Farrukh
内存不足异常对于看到周期性事务激增同时在内存中保留大量数据的应用程序很常见.但是,此问题取决于您的应用程序和体系结构.以下是一些指示:
GC是您的问题的核心.就原因而言,只要应用程序超过2-4 GB,Java和JVM就会出现问题.这需要查看GC的实际过程.
你有"老一代"和"年轻一代"的垃圾收集流程.当你运行app时,CLR会尝试保持你的内存空间有条理.当GC标记和交换过程发生时,这些进程会强制所有线程暂停(阶段更改).这里的问题是,根据代码的编写方式和长时间保存的内存量,可能会遇到内存问题.
每当您按运行时环境超过4 GB阈值时,您将看到收集时间呈指数级增长.当您点击"停止世界"暂停时(旧的GC将清除所有内容),CLR必须遍历整个堆并取消分配内存.根据您的应用程序,即使具有更多物理内存,16 GB也可能会给您带来问题(Windows Server 2008 R2 - Enterprise或DataCenter可支持2 TB).即使您为其提供更多物理内存,当您的完整GC命中时,您可能会看到LONG收集时间.
理想情况下,我会做以下事情:
获得更多物理内存(您永远不希望为您的应用程序分配600MB的总物理内存,以避免内存不足错误,但您的缓冲区确实取决于您的负载和应用程序处理它的能力......您可能需要更大的安全网是安全的).
获得物理内存后,您需要在强调应用程序的同时运行GC日志.这将让您了解在考虑堆大小(内存)时,您会看到性能呈指数级下降以及应用可支持的级别.您可能希望找到一种方法将16GB页面缩小到更小的尺寸.我确实知道.Net 4.0 Microsoft已经对GC进程做了一些可靠的改进,包括允许后台线程来维护GC.这应该让你能够支持更大的堆(理论上)......但没有什么比应用程序的真正测试更好.查看此链接以获取更多信息:
垃圾收集性能(Asp.net 4.0) - 另外,由于我的链接有限.导航到Fundamentals页面,了解有关ASP.Net 4.0的新GC功能的一些很好的解释(http://msdn.microsoft.com/en-us/library/ee787088.aspx#concurrent_garbage_collection)
希望这可以帮助!
PS - 任何有较小硬件的人都需要了解ASP.NET线程的使用.如果您正在开发像Core Duo这样的开发项目,则必须考虑50%的计算能力将用于GC优化.这意味着要考虑硬件(核心数).如果你有超过你需要的这个过程理论上应该有助于提高性能.如果您受到核心限制,请获得更好的硬件或使用旧版本的ASP.Net或考虑关闭该功能(如果可能).其次,如果延迟是一个问题,使用"超线程"确实也会对性能产生影响.你总是在"物理"核心上获得更好的性能......但对于99.9%的应用程序来说,这不会是一个问题.