dotnet核心-服务器挂起生产

时间:2018-09-04 01:00:02

标签: nginx .net-core devops

在Production上运行dotnet核心服务器设置时,我们当前遇到问题。我们将其发布在Bamboo中并从AWS linux服务器运行,它位于nginx反向代理的后面。

从本质上讲,每隔几天我们的dotnet核心服务器进程都会静音。它默默地接受并挂起Web请求,甚至默默地忽略我们(更有礼貌)阻止它的尝试。我们已经通过将curl请求直接从服务器内部发送到端口5000来证明它实际上是挂起的netcore进程。我们已经尽最大的能力将生产部署复制到了测试环境中,并且无法重现此故障模式。

我们用NewRelic监视了服务器,并在服务器进入故障模式时对其进行了检查。我们无法将此行为与任何重要级别的流量,RAM使用率,CPU使用率或打开文件描述符使用率相关联。确实,这些测量似乎都保持在非常合理的水平。

我和我的团队对于可能导致服务器挂起的原因,甚至诊断该服务器下一步的措施都有些困惑。 是什么原因导致我们的服务器进程挂起?我们可以采取哪些进一步的步骤来诊断问题?

其他信息

我们的nginx conf模板:

upstream wfe {
  server 127.0.0.1:5000;
  server 127.0.0.1:5001;
}

server {
  listen 80 default_server;
  location / {
    proxy_set_header Host $http_host;
    proxy_pass http://wfe;
    proxy_read_timeout 20s;

    # Attempting a fix suggested by:
    # https://medium.com/@mshanak/soved-dotnet-core-too-many-open-files-in-system-when-using-postgress-with-entity-framework-c6e30eeff6d1
    proxy_buffering off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_cache_bypass $http_upgrade;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
  }
}

我们的Program.cs

using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Net;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;

namespace MyApplication.Presentation
{
    [ExcludeFromCodeCoverage]
    public class Program
    {
        public static void Main(string[] args)
        {
            IWebHost host = WebHost.CreateDefaultBuilder(args)
#if DEBUG
                                   .UseKestrel(options => options.Listen(IPAddress.Any, 5000))
#endif
                                   .UseStartup<Startup>()
                                   .UseSerilog()
                                   .Build();

            host.Run();
        }
    }
}

在CD的构建过程中,我们发布要部署的应用程序,其中包括:

dotnet publish --self-contained -c Release -r linux-x64

然后我们将文件夹bin/Release/netcoreapp2.0/linux-x64部署到我们的服务器,并从内部运行publish/<our-executable-name>

编辑dotnet --version在我们的CI平台和生产服务器上均输出2.1.4

当中断开始时,nginx日志显示服务器对请求的响应从200变为502,并在中断时发出单个504。

同时,来自我们服务器进程的日志也将停止。那里有警告,但它们都是我们已放入应用程序代码中的显式警告。它们都没有表明已引发任何异常。

0 个答案:

没有答案