Nginx dotnet core-服务器挂起在生产上

Nginx dotnet core-服务器挂起在生产上,nginx,.net-core,devops,Nginx,.net Core,Devops,在生产环境中运行dotnet core服务器安装程序时,我们当前遇到了一个问题。我们用竹子发布它,并从AWS linux服务器上运行它,它位于nginx反向代理的后面 基本上,每隔几天我们的dotnet核心服务器进程就会静音。它默默地接受并挂起web请求,甚至默默地忽略我们(更礼貌地)阻止它的尝试。我们已经通过从服务器内部直接向端口5000发送curl请求来验证挂起的实际上是netcore进程。我们已经将我们的生产部署复制到了我们的测试环境中,并没有能够重现这种故障模式 我们已经用NewReli

在生产环境中运行dotnet core服务器安装程序时,我们当前遇到了一个问题。我们用竹子发布它,并从AWS linux服务器上运行它,它位于nginx反向代理的后面

基本上,每隔几天我们的dotnet核心服务器进程就会静音。它默默地接受并挂起web请求,甚至默默地忽略我们(更礼貌地)阻止它的尝试。我们已经通过从服务器内部直接向端口5000发送curl请求来验证挂起的实际上是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;
  }
}
我们的
程序.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();
        }
    }
}
然后,我们将文件夹
bin/Release/netcoreapp2.0/linux-x64
部署到服务器上,并从内部运行
publish/

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

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


同时,服务器进程中的日志也停止了。这里有警告,但它们都是我们在应用程序代码中添加的明确警告。它们都不表示抛出了任何异常。

您在停机期间捕获了任何服务器日志吗?您的.NET Core framework版本是什么?我们可以通过以下方式获得502,1)无法连接服务器2)服务器没有响应3)超时,因此如果您有502的详细日志,请将其添加到您的问题中。还建议,在您的阶段/质量环境中重现此场景,这将帮助您确定实际的根本原因;如果将应用程序与数据库连接,请确保没有死锁。
dotnet publish --self-contained -c Release -r linux-x64