我有一个 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/