【问题标题】:Is it possible to pre-warm the app?是否可以预热应用程序?
【发布时间】:2016-06-07 09:19:48
【问题描述】:

当您在 MVC6 应用程序上运行 dotnet run 时,第一次请求需要很长时间,但它显然可以正常工作。我试图在谷歌中找到答案,但这是不可能的,因为我得到的只是关于 IIS 的文章,而我根本没有使用。事实上,我在 Ubuntu 上运行代码。

是否可以预热 dotnet run 以使第一个请求与第二个请求一样快?

【问题讨论】:

  • 如何在重启后使用 curl 自己提出第一个请求?
  • 我当前的部署脚本实际上正在这样做,但这不是我想要的。
  • 您的应用程序在使用 dotnet run 时速度慢的原因有两个 - 1) 应用程序编译 2) 查看编译。 dotnet run 始终检查应用程序是否更改,如果更改,它将重新编译它(默认情况下针对每个目标框架)。如果这是为了在生产中运行应用程序,请不要使用 dotnet run,而是发布应用程序并直接运行它。如果这是在开发过程中,请确保您只为运行应用程序的框架进行编译。视图在运行时编译。可能可以预编译视图,但我不是 100% 确定。
  • @Pawel:预编译已从 RC2 中删除 github.com/aspnet/Mvc/issues/3917
  • 您可以做的是使用 Main 的剩余执行向您的红隼实例发出请求。

标签: .net asp.net-core .net-core


【解决方案1】:

一些建议:

  1. 使用 Release 版本,以便针对生产使用而不是调试优化代码 (dotnet run --configuration Release)
  2. 您自己启动第一个连接,因此来自您的客户端的所有后续请求都是“温暖的”
  3. 使用--native 标志进行编译,然后托管结果以进一步从性能优化中受益

最后(这一点纯属推测),可能会考虑在生产 Web 服务器主机(例如 Apache 或 IIS)而不是从 dotnet cli 中运行您发布的网站。这可能会提供性能增强,但肯定会提供 CLI 中不存在的“预热”功能(我知道 IIS 有一个 Always-On 选项)。

【讨论】:

  • 如果我在 Apache 或 Nginx 中运行它,它将只是一个反向代理,因此它与 CLI 没有任何不同。还是 .NET 已经有 cgi 实现了?
  • 正确。更多的情况是这些服务器功能更丰富,就像 iis 一直处于开启模式一样。此外,您可以运行具有多个代理的服务器场,然后单独升级它们并仅在它们温暖时启用它们。
猜你喜欢
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2011-06-10
  • 2011-05-01
相关资源
最近更新 更多