Asp.net mvc 3 使用Nginx托管的web应用程序首次向mono-fastcgi-server4发出浏览器请求时出现巨大延迟

Asp.net mvc 3 使用Nginx托管的web应用程序首次向mono-fastcgi-server4发出浏览器请求时出现巨大延迟,asp.net-mvc-3,nginx,mono,xsp,fastcgi-mono-server,Asp.net Mvc 3,Nginx,Mono,Xsp,Fastcgi Mono Server,我们正在使用mono版本3.10.0(来自$mono--version)、Nginx(1.6.2)和mono-fastcgi-server4来托管一个ASP.Net MVC3 web应用程序,该应用程序运行在Debian jessie linux(ARM-Raspberry Pi)上 mono --aot /usr/lib/mono/1.0/mscorlib.dll for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done

我们正在使用mono版本3.10.0(来自$mono--version)、Nginx(1.6.2)和mono-fastcgi-server4来托管一个ASP.Net MVC3 web应用程序,该应用程序运行在Debian jessie linux(ARM-Raspberry Pi)上

mono --aot /usr/lib/mono/1.0/mscorlib.dll 
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
基本上,我们似乎遇到了与此问题中描述的相同的问题:

mono --aot /usr/lib/mono/1.0/mscorlib.dll 
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
当浏览器/网站访问者发出第一个请求时,mono fastcgi服务器将使用所有CPU,最多持续120秒,直到网页显示在webbrowser中。这发生在每次启动/重新启动Web服务器之后

mono --aot /usr/lib/mono/1.0/mscorlib.dll 
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
据我所知,到目前为止,这是很正常的,如果你的网站是用IIS托管在windows服务器上,情况也一样。主要区别在于Windows服务器的速度要快得多

mono --aot /usr/lib/mono/1.0/mscorlib.dll 
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
为了尽量缩短启动时间,我已经尝试过:

mono --aot /usr/lib/mono/1.0/mscorlib.dll 
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
  • 使用Visual Studio中的“发布网站”功能将我的razor视图预编译为DLL。到目前为止,这是可行的,但似乎并没有显著减少启动时间

  • mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
  • 接下来我遇到的是AOTing(提前编译)bin文件夹中的dll(请参阅),我使用“mono--aot file.dll”预编译程序集。同样,没有性能提升

  • mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
  • 然后我发现,通过使用以下命令,您当然也可以对系统上的所有库进行AOT(在此处找到:):

    mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
    梅·覆盆子花了相当长的时间,但同样的结果

  • mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
    我是做错了什么还是遗漏了一些明显的东西

    mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
    上述问题的作者在最后一次关于延迟的评论中说:

    mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
    它是由生成和编译razor视图引起的,这些视图不能 然而,这些数据需要预先编译。这些文件被编译成/tmp/。。。那是 映射到嵌入式设备上的内存,因此在 重新启动。更糟糕的是,每次重新启动XSP Web服务器后 文件将被编译到/tmp的新子目录中。这边 每次启动XSP时都会重新编译razor视图

    mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
    我想是的 无论使用XSP4、mono fastcgi服务器,还是在使用Apache时使用mod mono,我的情况似乎都是一样的。(这并不奇怪,因为我认为它们都是基于XSP的——但也许我错了……)

    mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    
    现在提到的问题是从2011年开始的……有人知道有没有解决方案让Web服务器使用这些预编译文件吗

    mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done        
    

    我感谢你的任何暗示

    这里的asp mvc4和mono 3.12.1也一样。。。你最终解决了这个问题吗?没有。最终的“解决方案”是切换到node.js。工作非常好…很高兴知道,所以你完全避免了asp.net,对吗?是的…这非常令人伤心,因为我们已经用Entitfy Framework和Postgresql安装了一个运行良好的系统。但由于客户的要求,我们不得不换成另一种技术。
    mono --aot /usr/lib/mono/1.0/mscorlib.dll 
    for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done