向Mono XSP托管的Web应用程序发送第一个浏览器请求的巨大延迟
问题描述:
我们使用Mono(2.10)XSP4 Web服务器托管在开放式嵌入式Linux(ARM)上运行的ASP.Net MVC3 Web应用程序。启动XSP4时,需要几秒钟时间才能准备好并接受请求。到目前为止没有问题。向Mono XSP托管的Web应用程序发送第一个浏览器请求的巨大延迟
但是,当浏览器/网站访问者发出第一个请求时,XSP4使用所有CPU,它可以持续55秒左右,直到web浏览器中显示(成功)网页。这发生在每次启动/重新启动XSP之后。
我首先想到的是,这是对整个Web应用程序的即时编译。所以我构建了一个只包含二进制文件,.css,.js和视图(.cshtml)的部署包。它的工作,但仍然有这个巨大的延迟。
然后我尝试使用Visual Studio预编译该Web应用程序(如某些Mono发行说明中所述)。该网站再次运作良好,但仍然存在巨大的延迟。
,实际上是在我脑海中的一些问题:
- 有谁知道什么XSP Web服务器正在做,当第一浏览器的请求来了呢?这是即时编译,即使它是一个预编译的Web应用程序吗?
- 为什么每次启动后都会这样做?
- 巨大的延迟可以通常以某种方式减少吗?
- 是否可以减少巨大的延迟,以便在web应用程序更新(在后续运行的XSP之间缓存)之后,仅在第一个浏览器请求上完成这个巨大延迟?
任何帮助/想法都会很棒。
更新:在我发现延迟由单声道/ ASP.Net编译DCMS建设造成的,编译MVC3剃刀意见纳入/tmp/root-aspnet.../被映射到内存中的同时因此并不持久。我现在正在寻找一种方法来控制XSP4/Mono.WebServer/Mono-Asp.Net存储这些编译文件的位置。如果有人熟悉这让我知道;-)
答
这可能是本地编译开销(这是从不同的是什么预编译一样)。您可以检查是否AOTing the system libraries给你加速:
mono --aot /usr/lib/mono/1.0/mscorlib.dll
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done
非常感谢这个不错的提示。系统库仍在编译(AOTing);-) 我不明白的是为什么每次启动XSP都要完成JIT?无法单独缓存先前的JIT'ed程序集在磁盘/闪存上并重复使用它们? – Marc
刚刚有另一个想法:也许它的网络应用程序启动代码本身需要在嵌入式ARM设备上花费很长时间。这样它不会是JIT /编译器问题。 – Marc
已验证其编译器滞后 - 不是我们的代码;-) – Marc