我有一个IIS(Windows 2012R2 / IIS 8.5)上托管的ASP.Net Web应用程序。应用程序不断不断地从内存中丢弃静态资源(即静态类/集合),从而导致随机请求的速度大大降低。
通常在IIS worker进程内存超过900Mb(在开发设置中,总内存为4GB)然后降至350Mb左右时发生。在我们的生产设置中也会发生同样的情况(16Gb内存,应用程序最多消耗1.9GB,然后降至800Mb)
设置:
X64
移至Any CPU
,以排除
32位内存限制)。IIS设置:
因此,如您所见,我几乎排除了所有我能想到的东西。持续下降有什么原因吗? .Net CLR是否应该在内存中保留静态类,而不是随机丢弃它们?还是我错过了什么?
答案 0 :(得分:0)
您是对的,应用程序池应记录重启事件-但我注意到您并未列出完全禁用重启的功能。
默认情况下,IIS将其应用程序池配置为每29小时(1740分钟)重新启动一次,这意味着它不会在每天的同一时间重新启动,但会重新启动。但是,默认情况下,它应该执行“重叠回收”,在关闭旧实例之前,它会启动一个新实例。
如果这是由重启事件引起的,有两个选项可能会有所帮助:
0
来禁用回收。您已经将启动模式设置为Always Running
,但是通过应用初始化模块,您还可以declare a page要求服务器在启动过程中请求预热应用程序:
<system.webServer>
<applicationInitialization
doAppInitAfterRestart="true">
<add initializationPage="/default.aspx" hostName="myhost"/>
</applicationInitialization>
</system.webServer>