两天后MONO服务器冻结

时间:2018-03-05 20:14:57

标签: c# asp.net mono

我一直有问题让MONO在Linux上工作并且我变得绝望 - 我试图解决它的一切都失败了。 mod_mono在Ubuntu上占用100%CPU存在问题所以我重新安装了一个干净的Debian服务器并且问题仍然存在。我现在将apache2服务器切换到工作模式,并手动运行MONO实例以更好地了解正在进行的操作。

性能更好,在执行" service apache2 reload"时,我不再随机获得100%的CPU问题。或者几天后。

我有5个网站。 3现在运行完全稳定。 2个更重要的人在2-3天后冻结。然后我必须杀死MONO进程并重新启动它。

日志中唯一可以看到的是

Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
WARNING: WebConfigurationManager's LRUcache evictions count reached its max size
Cache Size: 100 (overridable via MONO_ASPNET_WEBCONFIG_CACHESIZE)
Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
Failed to receive record.
Terminating connection.
Failed to receive record.

我还能做些什么来解决这个问题?它是一个非常基本的网站,主要是基本的HTML页面,只有一些简单的表单。这两个网站由于配置差异仍然存在问题,或者因为它们获得更多流量而存在问题。

这是Web.config

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="MailServer" value="smtp.myserver.com"/>
    <add key="MailFrom" value="aaa@bbb.com"/>
    <add key="MailShareFrom" value="aaa@bbb.com"/>
    <add key="MailFromName" value="Etienne"/>
    <add key="ClientPicturesFolder" value="~/files/client-pictures/"/>
    <add key="ClientRecordingsFolder" value="~/files/client-recordings/"/>
    <add key="AdminPassword" value="aaa"/>
    <add key="OntraportAppId" value="xxx"/>
    <add key="OntraportApiKey" value="yyy"/>
  </appSettings>
  <system.web>
    <customErrors defaultRedirect="~/error.html" mode="RemoteOnly"/>
    <compilation debug="false" targetFramework="4.7.1"/>
    <httpRuntime maxRequestLength="153600" executionTimeout="1200"/>
    <!--150MB-->
    <pages controlRenderingCompatibilityVersion="4.0"/>
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="157286400"/>
        <!--150MB-->
      </requestFiltering>
    </security>
    <rewrite>
      <rules>
        <rule name="RemoveDefault" stopProcessing="true">
          <match url="(.*)/default$"/>
          <action type="Redirect" url="{R:1}/"/>
        </rule>
        <rule name="RemoveASPX" stopProcessing="true">
          <match url="(.*)\.aspx"/>
          <action type="Redirect" url="{R:1}"/>
        </rule>
        <rule name="AddASPX">
          <match url=".*" negate="false"/>
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
            <add input="{URL}" pattern="(.*)\.(.*)" negate="true"/>
          </conditions>
          <action type="Rewrite" url="{R:0}.aspx"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

注意:重定向规则不适用于Linux,而是使用.htaccess编写,但其他稳定网站在Web.config中具有相同的功能并且工作正常。

我尝试了很多东西,没有任何东西可以让MONO在Linux上稳定运行。我还能尝试什么?请注意,如果我将框架版本设置为4.0而不是4.7.1,则所有网站都会在几天后冻结。

目前正在运行MONO v5.10.0.140,并且已经尝试了许多不同的版本。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。虽然我的应用程序更多地使用表单,DB等。

这些问题通常会在我有大约140个并发连接时出现,并且冻结非常不频繁并且持续约30秒。

在过去的几周里,我对它们进行了过多的故障排除,我可以将它指向两件事。

  1. 您的应用程序可能无法扩展,因为ASP.NET配置为按顺序运行。要禁用它,我建议在<sessionState mode="Off" />下面添加system.web。 这使得请求的执行并行。虽然你可能想要你的应用程序能够做到这一点,因为你可以用它创建数据竞赛等,特别是如果你缓存很多。
  2. 检查您的MySQL查询。慢查询或其他错误可能会导致冻结。如果将其加载到过多,它可能会冻结整个服务器。死锁也是一个问题。 在我解决了这些问题之后,我设法完全删除了冻结,尽管这些错误仍然在日志中出现。 我还在研究MySQL如何影响主线程性能。
  3. 喝彩!

    编辑: 所以一段时间后我开始遇到完全相同的问题。根据负载,服务器在1-2天后冻结。 (504最终只显示了502)。

    所以我在设置中玩了很多。 我最终尝试使用除tcp套接字之外的其他套接字。因为事实证明,如果存在套接字异常,则抛出这些错误消息。现在我使用unix套接字,到目前为止它运行顺利。 我会在几天内再次编辑这篇文章,当时我得到了一些结果。