【发布时间】:2011-01-10 06:10:32
【问题描述】:
如何确保在触发应用程序/应用程序池重启时,应用程序尽快恢复联机?
更好的是,有没有办法在通常的触发器发生时防止应用程序重新启动?比如修改 web.config、global.asax 或 machine.config?
【问题讨论】:
标签: asp.net performance application-pool application-restart
如何确保在触发应用程序/应用程序池重启时,应用程序尽快恢复联机?
更好的是,有没有办法在通常的触发器发生时防止应用程序重新启动?比如修改 web.config、global.asax 或 machine.config?
【问题讨论】:
标签: asp.net performance application-pool application-restart
我遇到了一个类似的问题,因为我正在运行一个流量非常高的网站,每秒可以收到 300 多个请求。重启至少需要 90 秒。
当我做出重新启动服务器的更改时,重新启动似乎会停止,直到所有旧请求(其中一些运行时间很长)关闭。我可以通过手动杀死旧的 w3wp.exe 实例来加快重启速度。
有什么方法可以强制 IIS 立即关闭所有连接并进行硬重启? IIS 或 asp.net 中的某些设置来控制这个?
【讨论】:
对于 Web 应用程序项目,您可以使用 Web 部署项目 (VS2010 download link) 将站点预编译为类似于网站项目的 DLL。见ScottGu article on how to use WDPs。
【讨论】:
ASP.NET 4.0 (Scott Guthrie talks about it) 中将提供“自动启动”功能,但现在对您没有帮助。
请确保您的网站/应用程序正在运行的应用程序池不会自动进入“睡眠”状态。默认 AppPool 设置为在 20 分钟不活动后关闭。我记得这不会使网站重建,但会使第一个请求明显变慢。
小记,网站项目也可以构建,所以你的 App_Code 将是空的,你的 bin 文件夹将包含一堆 .dll 的(只需使用 Build > Build Website)。这肯定会使对您网站的第一个请求更快。我认为网站应用程序不会比预编译的网站项目更快启动,但它更易于管理。
【讨论】:
是的,迁移到网络应用程序将加快重启过程。另一件事是让你的 global.asax 尽可能干净。
即使使用 Web 应用程序,如果修改了这些配置文件中的任何一个或您的 bin 目录中的程序集发生更改,该站点也会重新启动。你无法阻止它。
重启时间应该很快,大约 2 到 3 秒。但是,我见过一些非常复杂的 global.asax 文件,它们设置了一些域级别的数据,这些数据最多需要 20 秒。当然,他们愿意为此付出代价,因为这将一些正常的页面加载时间从 3 秒缩短到了 0.1 秒。
【讨论】:
我们主要使用网站项目,所以我认为切换到 Web 应用程序项目会加快速度,因为所有代码文件都预编译为 .dll。
在使用网站项目时,我认为将 App_Code 文件移动到外部类库中也会加快速度,因为代码会被预编译。
【讨论】: