Preload()的不稳定行为

时间:2015-01-09 11:29:04

标签: c# azure iis-8 application-pool preload

我在Windows Azure中托管了一个WCF应用程序。它有IIS v8.0

我已将IProcessHostPreloadClient's Preload()方法用于应用程序预热

现在,我有两个问题:

1)每当我的应用程序池回收时,Preload()函数被调用两次。我在preload()方法中初始化了一些静态变量,这些变量将在我的工作进程(w3wp.exe)中保留。

我所看到的很有趣:

我当前的工作流程ID是(w3wp.exe 1234,比如说)

在回收时,preload被调用两次:

第一次:在w3wp.exe中有进程ID5678,说(一个新的工作进程)

第二次:在w3wp.exe中有进程ID: 1234(与现有进程相同)

现在,我已经配置了我的应用程序池,以便只存在一个w3wp.exe实例。因此,在发生循环之后,存在的w3wp.exe是进程ID:5678。

我的问题是,为什么有进程ID:1234的死亡w3wp.exe已执行预加载

两者之间有3毫秒的差距。

修改 我刚刚了解到,由于app-pool循环,一个旧的w3wp.exe终止并启动了一个新的w3wp.exe。 导致preload被调用两次的原因是:

1)w3wp.exe的新进程 - 导致在新进程上调用preload()(在我们的示例中为进程ID:5678)

2)w3wp.exe的旧进程(进程ID:1234):其app-domain在被杀死之前重新启动。因此,当重新启动app域时,会调用preload()

现在,我的问题是为什么一个垂死的w3wp.exe的app-domain重新启动了。它在接下来的3ms内即将死亡(如上所述)

2)我已经开始服务了,我正在做一些测试。在此期间,工作进程暂时没有提供任何请求。但我的w3wp.exe有一个连续运行的线程。

我们在一段时间之后观察到的是,w3wp.exe(进程ID 1234,比如说)的现有实例突然结束,并且在同一进程中调用了preload()(进程ID为1234的w3wp.exe

我假设的是,出于某种原因,再次调用了预加载。我曾经认为只有在创建新的w3wp.exe时才会调用preload(反过来意味着应用程序池已经回收)

此行为被观察了两次 谁能告诉我任何关于它的事情

编辑

答案:偏爱:因为app-domain重启。我仍然不知道为什么app-domain重新启动

0 个答案:

没有答案