IIS Web 应用程序的响应时间测量

IIS Web 应用程序的响应时间测量

我有一个 dot net web 应用程序,想测量响应时间。我目前有两个测量方法。“内部”测量是在 web 应用程序本身内进行的。“外部”测量是从客户端的往返时间(包括网络延迟等)。

显然,内部响应时间总是小于外部响应时间,有时甚至小于相当大。

我想要的是介于这两个测量值之间的另一个(可能不止一个)测量值。我该如何进行这样的测量?例如,一个忽略网络传输时间的测量值,但只要请求到达服务器计算机/ IIS /我的应用程序池/等就会启动。

不幸的是,我没有足够的 IIS 知识甚至无法澄清这个问题,更不用说自己回答了。


编辑:一些进一步的信息

Web 应用程序是 ac# 计算引擎。没有数据库访问,没有用户。应用程序公开 WCF 端点。响应时间相当稳定,约为 200 毫秒,但有时会出现峰值,我担心的就是这些峰值。峰值的一个来源是应用程序池回收(每 29 小时一次),但我们可以安排它。

我正在服务器上测量客户端的性能以绕过网络。这消除了许多峰值,但不是全部。我以服务器 30% 的 CPU 使用率运行负载。客户端 CPU 使用率可以忽略不计。

答案1

我想要的是介于这两个测量值之间的另一个测量值(可能不止一个)。我该如何进行这样的测量?

如果您有权联系创建此应用程序的开发人员,请让他们编写一个小型检测包(非阻塞!),以便您可以直接从应用程序中提取该计数器。

如果不能,您将需要开始调试应用程序本身,以确定执行时间以及执行地点。

由于这是一台 Windows 机器,你可以从进程监视器了解每个请求期间发生的情况。然后,您可以使用更强大的调试工具,例如 windbg记录器

答案2

快速而简单:直接在同一台服务器上或(如果您担心负载影响)在同一网络(通常是您的 Web 应用程序服务器所在的 DMZ)中开始测量。

实际上,您会了解到 Web 应用程序的不同性能因素:

  • 您的应用程序的净响应时间(仅限您的应用程序,只有一个用户)
  • 应用程序的总响应时间(包括应用程序;Web 服务器堆栈;多个用户;对数据源、设备和网络的并发访问)

在这里看到差异是绝对正常的。如果没有差异,测量结果就会令人怀疑。

然而,如果您想避免由不同的网络速度、带宽、客户端问题等引起的测量错误,请在本地主机上启动总响应时间测量(并据此标记结果)或增加测量点(客户端)的数量、测量的时间范围并计算平均量(您可以为此目的创建自己的 JavaScript 或使用现有工具,例如 Google Analytics)。

答案3

听起来像是性能计数器的工作。如果您单击开始 -> 运行 -> Perfmon.msc,那么在运行的应用程序中,您可以添加针对 IIS 和系统不同方面的各种监控。它应该能够为您提供 IIS 请求的端到端答案,包括它们等待处理的时间以及处理了多长时间。

如果您想在更长时间内进行记录,它还允许您将它们保存到文件或数据库中。

您说 CPU 的运行率为 30%。这是一台多核计算机吗?如果它有 4 个核心,而您的代码没有并行化,那么即使表面上看起来不是这样,您也可能面临处理器超负荷的问题。

答案4

听起来您正在寻找应用程序性能管理工具。有几种适用于 .NET 应用程序的工具,根据工具和预算,您可以评估单个 Web 请求的性能、将事务跟踪精确到特定代码行、捕获应用程序错误、关联服务器子系统性能(磁盘、CPU、内存)、监控依赖项的性能(缓存层/机制、外部 Web 服务、数据库)等等。

一些常见的 APM 工具可以帮助您进行进一步的研究,它们是 Dynatrace、AppDynamics、New Relic 和 Lean Sentry。

请记住,仅仅购买其中一种工具并不会解决对你来说,一切都是那么简单。你必须聘请专家或充分了解工具,才能收集到可操作的信息,但最终你可能会得到更多细节,而当你从应用程序外部进行监控时,这些细节根本无法“看到”,因为没有任何钩子/api/等可以揭示一些幕后情况。

相关内容