我在IIS中运行多个Web服务(WCF)。当服务温暖(加载)时,典型的请求大约需要0.5秒才能完成。但是,当应用程序不热(冷启动)时,在服务启动并运行之前,第一次命中需要大约20秒。发生应用程序池循环时会发生同样的情况。
我希望减少此Web服务的冷启动时间。我已经执行的一些操作是:
配置应用程序池,使其在20分钟后空闲时间不再循环(以便应用程序保持温暖)。 这可以最大限度地减少冷启动的发生,但不会使冷启动更快。应用程序池回收现在有限,但确实发生了。
修改了machine.config,
<runtime>
<!-- see http://msdn.microsoft.com/en-us/library/bb629393(v=vs.90).aspx -->
<generatePublisherEvidence enabled="false"/>
</runtime>
这会将启动时间从20秒减少到大约10秒。
NGEN
预编译程序集for %d in (*.dll) do ngen install %d
这不会减少启动时间(只会增加部署的复杂性)。
我真的希望进一步缩短冷启动时间。我有什么选择呢?
(旁注:找出启动时间花在哪里的最佳方法是什么?我如何监控正在发生的事情?)
答案 0 :(得分:2)
我已经使用procmon
进行了一些进一步的测试。似乎没有一个启动时间的原因,它是很多小时间点(过程启动,加载,网络运行时,读取配置,加载程序集等等),总计时间总和。
答案 1 :(得分:1)
我对this article中找到的策略运气不错。它使应用程序保持活动状态,这样一旦它运行,你就不会有任何冷启动(除非IIS或机器实际上是故意重启或由于重大错误)。无论任何活动,该应用程序都会保持活力。
这篇文章是关于每隔一段时间安排一些事情的,但如果你的唯一目标是让应用程序保持活跃,你可以跳过这部分。