【发布时间】:2011-04-05 16:40:11
【问题描述】:
我在 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
这不会减少启动时间(只会增加部署的复杂性)。
我真的很想进一步减少冷启动时间。我有什么办法可以做到这一点?
(附带说明:找出启动期间时间花在哪里的最佳方法是什么?我如何监控正在发生的事情?)
【问题讨论】:
-
什么版本的 IIS?可以安装AppFabric吗?
-
Windows 2003 上的 IIS 6。AppFabric 如何帮助缩短启动时间?
-
AppFabric 具有自动启动功能,可防止预热延迟。这是给您的博客文章,但这仅在 IIS 7.5 中可用,因此对您没有任何帮助。如果您不能使用 AppFabric,请考虑自行托管您的 WCF 服务。 blogs.msdn.com/b/appfabriccat/archive/2010/10/29/…
-
如果您决定采用自托管路线,请查看 ECollective:soacollective.com/solutions/ecollective/ecollective-features
标签: .net asp.net performance iis startup