ASP.NET WebAPI和IIS中的请求时间不一致

尼古拉·科斯托夫(Nikolay Kostov)

问题

我正在测试AngularJS + ASP.NET WebAPI应用程序之一的性能。我观察到的奇怪的是,在Fiddler,完全相同的查询是在不同的时间执行的

不仅在服务器上,而且在我的本地计算机上也观察到此行为。

细节

该应用程序已使用Chrome进行了测试,并使用编写在ASP.NET WebAPI(Microsoft.AspNet.WebApi version 5.2.2)中Angular JS version 1.3.8

该服务器是带有SQL Server 2008和IIS 7.5的Windows Server 2008 R2。

我的本地计算机是带有Visual Studio 2013和SQL Server 2014的Windows 8.1。

我注意到,根据Fiddler,完全相同的查询是在不同的时间执行的蓝色的查询是相同的,白色的查询是另一种完全相同的查询):

提琴手的要求

例如,查询号26的详细时间为:

Request Count:   1
Bytes Sent:      583        (headers:517; body:66)
Bytes Received:  3,844      (headers:260; body:3,584)

ACTUAL PERFORMANCE
--------------
ClientConnected:    17:26:25.099
ClientBeginRequest: 17:27:26.544
GotRequestHeaders:  17:27:26.544
ClientDoneRequest:  17:27:26.544
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    17:26:25.102
FiddlerBeginRequest:    17:27:26.544
ServerGotRequest:   17:27:26.544
ServerBeginResponse:    17:27:26.554
GotResponseHeaders: 17:27:26.554
ServerDoneResponse: 17:27:26.554
ClientBeginResponse:    17:27:26.554
ClientDoneResponse: 17:27:26.554

    Overall Elapsed:    0:00:00.010

查询号28的详细时间为:

Request Count:   1
Bytes Sent:      583        (headers:517; body:66)
Bytes Received:  3,844      (headers:260; body:3,584)

ACTUAL PERFORMANCE
--------------
ClientConnected:    17:26:25.099
ClientBeginRequest: 17:27:29.104
GotRequestHeaders:  17:27:29.104
ClientDoneRequest:  17:27:29.104
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    17:26:25.102
FiddlerBeginRequest:    17:27:29.104
ServerGotRequest:   17:27:29.104
ServerBeginResponse:    17:27:29.616
GotResponseHeaders: 17:27:29.616
ServerDoneResponse: 17:27:29.616
ClientBeginResponse:    17:27:29.616
ClientDoneResponse: 17:27:29.616

    Overall Elapsed:    0:00:00.512

正如我所说,它们是完全相同的查询(相同的标头,相同的数据等)。

在查询26之后1-2秒执行查询28。

问题

发生这种行为的主要原因可能是什么?我应该在哪里寻找问题?奇怪的是,查询先是快速然后缓慢,然后又是快速,等等。我没有理由认为问题与数据缓存有关。

如何精确测试服务器上的计时,以发现0.0100.512之间的差异相差超过50倍。

西罗科

这不是一个尖锐的问题,但是这是我进行故障排除的方法:

  1. 对REST API客户端使用类似此chrome扩展名的东西向终端发出请求。(您也可以使用类似:http//jmeter.apache.org/的方法,但是设置起来比较复杂)
  2. 运行20次并保存时间。
  3. 清空数据库,然后仅填充此请求所需的表-仅几行数据。
  4. 运行工具20次-存储时间。他们是一致的吗?如果在这一点上它们不一致,那么我将代码视为罪魁祸首。

    • 您在打电话给任何外部服务吗?
    • 除了执行查询之外,服务在加载数据时还执行其他操作吗?
    • 使用诸如dotTrace之类的探查器来查看花费了更多时间的事情。(实际上,您应该从一开始就使用它)
  5. 如果时间仍然一致,请在数据库中加载更多数据,直到时间开始不一致为止。然后分析查询并开始优化它们。

现在,根据时间的不一致程度,我可以假定该服务在加载数据时会执行其他操作:外部服务调用..某些操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章