Recompilation limit of 15 reached HostingEnvironment initiated shutdown原因排查

之前写了篇ASP.NET站点自动重启问题排查的文章,里面提到了我的一个运行的项目会隔几分钟就IIS应用程序池重启一次,分析了很多原因,终于今天通过我的测试,得到了我的项目IIS应用程序池会重启的原因。本来准备在原来博文基础上进行修改的,但是为了更好的记录问题排查的过程,我还是准备不动之前的博客,另开一篇。

之前的博文中有讲到

======================================

我的站点重启的原因最有可能是两个

1.一个文件夹里同时有很多文件发生改变,.NET系统对这些变化通知来不及反应,这时候可能会重启

2.我Asp.net文件里面会include动转静生成的html文件,可能也被认为是Asp.net文件发生了变化,这个原因感觉是微乎其微,因为include动转静生成文件的asp.net文件不止15个,而且我把动转静的文件个数控制到15个以内的话,居然还是会出现重启的情况,虽然频率降低了。

======================================

今天我做了个测试页面,对上面第二种可能的原因分析了一下。

测试页面:default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestCompile._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>                 
    <div>
    <!-- #include file="default.htm" -->
    </div>
</body>
</html>

include页面:default.html

12345678910111213141516

准备工作做好后,就进入了测试阶段,编译好项目,然后我执行下面的操作(1或者2)15次,结果发现系统日志里面没有抛异常,当执行第16次时,系统日志里面发现了异常(见下图),试了两遍后,发现结果完全一样。


1.修改include页面一次,然后保存,刷新default.aspx页面(这个很关键,这个会触发一次.net动态编译),为了方便我统计,我第一次写入1,第二次写入2,以此类推。。。

2.default.html不做任何修改,而是对default.aspx修改,保存,刷新(这个很关键,这个会触发一次.net动态编译),为了方便统计我也是第一次写入1,第二次写入2,以此类推。。。

结论:

上面第2点很好的验证了导致Asp.Net站点重启的10个原因中的 5. 修改aspx,ascx,asmx,master等文件不一定会导致重启;但是每修改一次都会导致一次重新编译,重新编译次数达到15次之后会导致站点重启

但是第1点为什么也会导致站点重启呢,因为我的程序里运用了大量的include(include的html文件有多个),并且include的html文件每隔几分钟就会变化一次,站点访问量还是蛮大的(include文件修改后可以触发),导致编译的次数一段时间后达到了15次。在这里include的文件可以理解为类似用户控件(ascx文件)的东东。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值