我有一个点networking的Web应用程序,并希望测量响应时间。 我目前有两个措施。 “内在”措施是在networking应用程序本身。 “外部”措施是来自客户端的往返时间(包括networking滞后等)。
显然内部响应时间总是小于外部响应时间,有时非常显着。
我想要的是在这两个测量之间的另一个(可能超过1)测量。 我将如何采取这样的措施? 例如,忽略networking传输时间的措施,但一旦请求到达服务器机器/ IIS /我的应用程序池/
不幸的是我没有足够的IIS知识来解决这个问题,更不用说自己来回答了。
编辑:一些进一步的信息
Web应用程序是ac#计算引擎。 没有数据库访问,没有用户。 该应用程序公开了一个WCF端点。 响应时间在200毫秒左右是相当一致的,但有时会出现尖峰,这是我所关心的尖峰。 峰值的一个来源是应用程序池回收(每29小时),但我们可以安排。
我正在测量服务器本身的客户端的性能以绕过networking。 这消除了许多尖峰,但不是全部。 我正在运行服务器CPU使用率30%的负载。 客户端的CPU使用率是微不足道的。
快速简单:直接在同一台服务器上,或者在同一个networking(通常是您的Web应用程序服务器所在的DMZ)上直接开始测量(如果您担心会影响负载)。
其实你知道web应用程序的不同性能因素:
看到这里的差异是绝对正常的。 如果不是这样的话,那么测量结果是可疑
但是,如果您想要避免因networking速度,带宽,客户端问题等造成的测量错误,请在本地主机上启动总响应时间测量(并根据此结果标记结果)或增加测量点数(客户端),计算时间框架并计算平均数量(您可以为此创build自己的JavaScript,也可以使用现有工具,例如Google Analytics)。
听起来像性能计数器的工作。 如果你点击开始 – >运行 – > Perfmon.msc,那么在运行的应用程序中,你可以为IIS和系统的不同方面添加各种监控。 它应该能够为您提供IIS请求的端到端解答,包括等待处理的时间以及处理时间。
如果要login更长的时间,还可以将它们保存到文件或数据库中。
你说CPU运行在30%。 这是一个多核心的电脑吗? 如果它有4个核心,并且你的代码不是平行的,那么即使它不以这种方式出现,也可能会使处理器的性能下降。
我想要的是在这两个测量之间的另一个(可能超过1)测量。 我将如何采取这样的措施?
如果您有权访问创build此应用程序的开发人员,请让他们编写一个小的工具包(非阻塞!),以便您直接从应用程序中提取此计数器。
如果你不能,你将需要开始debugging应用程序本身,以确定在执行中花费多长时间和在哪里花费时间。
由于这是一台Windows机器,因此您可以从stream程监控开始,对每个请求期间发生的情况有一个高度的了解。 然后,您可以转到更强大的debugging工具,如windbg logger.exe 。
这听起来像你正在寻找一个应用程序性能pipe理工具。 有几种.NET应用程序,根据工具和预算,可以评估各个Web请求的性能,将事务跟踪logging到特定代码行,捕获应用程序错误,关联服务器子系统性能(磁盘,CPU,内存),监视依赖性(caching层/机制,外部Web服务,数据库)的性能等等。
一些常见的APM工具来寻找并开始进一步的研究,Dynatrace,AppDynamics,New Relic和Lean Sentry
请记住,仅仅购买这些工具就不能解决任何问题。 您必须聘请专家或学习工具来收集可操作的信息,但是当您从应用程序外部进行监控时,您可能会得到更多更详细的信息,而不会显示任何钩子/ apis /等,揭示了一些发生了什么事情。