ASP.NET站点自动重启问题排查

发表于:2013-1-25 09:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:kaosini    来源:51Testing软件测试网采编

  下面是微软的帮助和支持里面的类似问题的原因和解决方案

  微软BUG之多个 ASP.NET 应用程序重新启动出现每隔一至五分钟

  症状

  很多新的.aspx、.ascx 或.asmx 文件传播到服务器,服务器可能会报告完成后段时间的连续的应用程序重新启动。此问题可能会显示几种不同方式:

  为每次重新启动,重新启动 ASP.NET\Application 性能计数器就会增加。

  如果使用内存中会话状态,会话变量都将丢失。

  应用程序状态都将丢失。

  反复执行Application_Start和Application_End事件。

  原因

  默认情况下当您更新少于 15 个文件在 ASP.NET 中,文件编译和加载到内存中的已编译文件的旧版本。这是.NET 公共语言运行时命名的并行执行的功能。

  但是,旧版本的已编译的代码保持无限期地使用通过并行执行的内存中。当您更新多个文件 (例如,30 多个文件),如果不重新启动应用程序以清除内存中的旧版本时,可能使用过多的内存。若要解决此问题,ASP.NET 有一项功能的应用程序将自动重新启动特定数目的文件更新后。

  应进行重新启动,一次只能为已更新的文件的完整列表。重新应用程序启动后,旧版本应不驻留在内存中。因此,应用程序应该不需要重新启动以重新编译文件的新版本。但是,加载到服务器 (例如,61 文件) 很多新的.aspx 或.ascx 文件时,将出现此问题。重新服务器卸载前 15 个文件时编译应用程序和每次重新编译另一个文件 15 个直到服务器达到 61。这将导致四个应用程序重新启动,即使只需要其中的。

  解决方案

  若要避免自动重新启动基于已更新的文件的数量,将numRecompilesBeforeAppRestart属性设置 Machine.config 文件中默认值为 15 为数字的大于计划内的应用程序重新启动之间将更新的文件的数目。如果您将numRecompilesBeforeAppRestart设置为很多,您可能需要重新启动应用程序手动释放旧版本的程序集使用的内存。

  注意: 如果 ASP.NET 消耗太多内存,ASP.NET 应用程序自动重新启动。

  如果要更新一定数目的文件,并且如果您想要应用程序自动重新启动,设置numRecompilesBeforeAppRestart为一个数字,小于只是将更新的文件的数目。这将导致较少的内存中的旧程序集的单个应用程序重新启动。例如,设置为numRecompilesBeforeAppRestart ,如下所示:

  <compilation debug="false" explicit="true" numRecompilesBeforeAppRestart="50" defaultLanguage="vb">

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号