【问题标题】:Strange deadtimes in app services requests?应用服务请求中的奇怪死区时间?
【发布时间】:2019-10-17 01:00:48
【问题描述】:

我们正在使用 Web API 和 .NET 框架 4.6.2 在 Azure 上开发应用服务。我们正在做一些负载测试,这些测试给了我们一些峰值。

如果我们深入研究返回这些峰值的交易,我们可以看到:

如您所见,在返回响应之后(我们在返回之前使用事件检查这一点),在某些事情上浪费了很多时间。 这是什么东西,我们如何避免它?

在处理请求之前浪费的时间更少,您可以在此处看到:

更深入(但在其他请求中),进入探查器跟踪,我们发现“非托管异步”。但是我们不太了解那是什么以及避免它的方法。这个“非托管异步”会是浪费时间的原因吗?

【问题讨论】:

  • 这是在特定数量的并发请求之后开始的吗?如果是这样,可能是由于请求被 ASP.NET 排队。
  • 负载测试每秒有 1300-2000 个请求。但是,在处理请求之后,排队的请求是否是浪费时间的原因?
  • 有想过吗?我们面临着同样的问题。来来去去的间歇性峰值,非托管异步需要很长时间......然后消失。

标签: azure asp.net-web-api azure-application-insights azure-web-app-service


【解决方案1】:

.Net 框架发出 ETW 事件并在线程之间传递活动 ID,以便可以跨线程跟踪异步调用。非托管代码(本机代码)和一些较旧样式的异步代码缺少这些事件和活动 ID,因此分析器无法跟踪哪个线程正在运行代码以及正在运行哪些代码。这在调用堆栈中被标记为“非托管异步”。如果您下载 ETW 文件,则可以使用 perfview 来更深入地了解正在发生的事情。

https://github.com/Microsoft/perfview/blob/master/documentation/Downloading.md

https://docs.microsoft.com/en-us/azure/azure-monitor/app/profiler-overview

希望对你有帮助。

【讨论】:

  • 谢谢,我们已经阅读了 here 的描述并使用了 perfview,但我们不知道在那里寻找什么。
猜你喜欢
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2017-09-04
  • 2011-11-27
相关资源
最近更新 更多