Azure 套接字泄漏?

标签 azure asp.net-core asp.net-core-mvc

我有一个 ASP.NET Core 网站,该网站有很多并发用户,白天多次崩溃,我进行了扩展和缩小,但没有成功。 我被告知我的众多 Azure 支持人员,问题是我发出了大量数据库调用,尽管创建索引后数据库利用率有所提高。你能告诉我你认为问题是什么吗,因为我已经尽力了...... 我被告知我有“套接字泄漏”。

请注意:

  • 除了 sendgrid 之外,我没有任何外部服务调用
  • 我没有使用过ConfigureAwait(false)

  • 我没有使用“using”语句或显式处置上下文

这是我的连接字符串如果有帮助...

Server=tcp:sarahah.database.windows.net,1433;Initial Catalog=SarahahDb;Persist Security Info=False;User ID=********;Password=******;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Max Pool Size=400;

这些是一些代码示例:

在 Startup.CS 中:

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

主类:

    private readonly ApplicationDbContext _context;

    public MessagesController(ApplicationDbContext context, IEmailSender emailSender, UserManager<ApplicationUser> userManager)
    {
        _context = context;
        _emailSender = emailSender;
        _userManager = userManager;
    }

这是一个重要的方法代码,例如:

       string UserId = _userManager.GetUserId(User);
        var user = await _context.Users.Where(u => u.Id.Equals(UserId)).Include(u => u.Messages).FirstOrDefaultAsync();
        // some other code
        return View(user.Messages);

请提出建议,因为我已经尽力了,但这对我的客户来说非常尴尬。

最佳答案

如果没有您看到的错误消息,您可以检查以下一些想法。

  • 我首先要转到 Azure 门户中 Web 应用程序的概述边栏选项卡。将监控图表更新为您遇到问题的时间段。你受CPU限制吗?你的内存力耗尽了吗?另外,检查 HTTP 队列长度。如果您的 HTTP 队列真的很长,那是因为您的服务器在尝试处理请求时遇到了阻塞,并且用户遇到了超时问题。

    • 接下来,跳转到 Azure 门户中 SQL Server 的“概述”边栏选项卡,然后查看资源利用率图表。将图表上的时间段设置为您遇到问题的时间段。您是否已为数据库确定了 DTU?如果是这样,则表明索引编制不佳、模式设计不佳,或者您的规模不够大,需要扩大规模。

    • 如果尚未启用 ApplicationInsights,请启用它。您可以使用 ApplicationInsights API 将自己的跟踪语句插入到代码中。或者,您也许能够看到导致问题的异常,而无需自己进行跟踪。

    • 检查您的 Web 应用程序的 Kudu 日志。

我同意 Tseng 的观点 - 您对 EF 和 .NET Core 的 DI 框架的使用看起来是正确的。

请告诉我们故障排除的进展情况,并提供有关您所看到的错误类型的更多信息。祝你好运!

关于Azure 套接字泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42104788/

相关文章:

azure - 如何自动化 Azure Web 应用程序部署以从 Azure 容器中选择最新图像

c# - Azure 运行状况检查端点代码更改 ASP NET

c# - 在 Asp.net core 启动时创建的 SQL 分布式缓存

c# - Autofac - ASP.NET Core Action 过滤器中的属性注入(inject)

c# - 如何 `extern alias` 一个带有.Net核心的程序集?

ASP.NET Core RC2 项目 - 服务文件夹的用途是什么?

c# - 在 WebService 中找不到 Windows Azure 管理证书

azure - 删除 Azure Blob 存储中的 "folder"

asp.net-core - ASP.NET Core MVC 中的输入流

dependency-injection - 如何开始使用 ASP.NET (5) Core 和 CaSTLe Windsor 进行依赖注入(inject)?