Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET Web服务+;IIS性能诊断_Asp.net_Performance_Web Services_Iis_Testing - Fatal编程技术网

ASP.NET Web服务+;IIS性能诊断

ASP.NET Web服务+;IIS性能诊断,asp.net,performance,web-services,iis,testing,Asp.net,Performance,Web Services,Iis,Testing,在大负载下,需要找出服务器应用程序的性能瓶颈。应用程序由单个服务实例(.asmx)和通过http不时请求的一些文件组成。我解决这个问题的计划是:1)当服务器以某种方式开始出现故障时,进入异常情况;2)分析性能计数器,并在该时刻登录,以扣除是什么类型的调用导致了这种情况 为了开始实现这一点,我已经实现了一个特殊的客户端,它发出这两种类型的请求,并使其无限期地重复各自的周期,希望在某个时候我会在WebMethod/get url请求过程中出错(NB-标准的现有解决方案,如JMeter和WAPT,由于

在大负载下,需要找出服务器应用程序的性能瓶颈。应用程序由单个服务实例(.asmx)和通过http不时请求的一些文件组成。我解决这个问题的计划是:1)当服务器以某种方式开始出现故障时,进入异常情况;2)分析性能计数器,并在该时刻登录,以扣除是什么类型的调用导致了这种情况

为了开始实现这一点,我已经实现了一个特殊的客户端,它发出这两种类型的请求,并使其无限期地重复各自的周期,希望在某个时候我会在WebMethod/get url请求过程中出错(NB-标准的现有解决方案,如JMeter和WAPT,由于服务使用场景的复杂性,无法使用)。到目前为止,我观察到的是服务调用中的响应时间增加,以及文件加载过程中的一些网络超时异常(使用HttpClient引发OperationCanceledException,根据-,它被视为超时)。顺便说一句,这很奇怪,因为文件大小只有几kb,服务方法每个请求返回5-10 mb的数据。认为“较大”的请求更可能首先失败。
Perfmon显示CPU负载增加,绝对没有内存峰值/泄漏。请求执行时间计数器非常随机,看起来不相关,队列长度始终为0
这就是说,看起来IIS很好地处理了我的临时DDoS,同时使测试方法无效(响应时间的增加意味着测试客户端上内存中有更多活动请求,这会在某个时候导致内存溢出,并且我在收到数据后立即刷新数据,而不做任何处理)
更多详细信息:服务器机器是4x3Ghz内核,4GB RAM。我每秒生成50-100个请求的负载,从而产生10-20 Mb/秒的带宽(测试客户端位于服务器数据中心内的VM上,4 Gbps NIC)。30分钟的测试会话是服务器和客户端之间约10-30 Gb的纯数据传输

我如何才能真正使Web服务/IIS停止运行?

首先,我不会编写自己的负载测试工具;有很多。我用过(开源)。您可以使用JMeter(和其他类似的工具)发送POST和GET、cookies和其他HTTP头——尽管无可否认,对于复杂的情况来说,这确实是一个挑战

接下来,确保您的问题确实是服务器,而不是其他基础设施-网络、路由器、防火墙等。所有这些都具有最大的功能,并且可能是问题的根本原因。其中大多数都有日志记录和报告工具。例如,我看到测试报告在达到防火墙的最大容量时出现吞吐量问题;服务器甚至还没有接近崩溃点。这是因为我们在测试用例中包含了一个相当大的二进制文件,通常由CDN提供

其次,总的来说,服务静态HTTP请求不太可能是问题所在——IIS真的、真的是这样。对于您提到的那种硬件,我希望每秒处理数千个请求。对于静态文件

在大多数情况下,是动态页面导致了问题-您的.asmx。因此,我将忽略负载测试中的所有静态文件,并将重点放在.asmx上。在您提到的那种硬件上,如果ASMX工作正常,您可能需要每秒生成数百个请求

假设您的web服务器已正确调优,并且asmx脚本的性能合理,我希望测试系统至少需要两倍的(CPU和内存)容量,因为您的服务器必须使其达到临界点(这是基于我使用JMeter的经验,JMeter的效率不如我的web应用程序,但它使部署多个测试客户机变得容易)。因此,在您的案例中,我将寻找两台与您的服务器规范匹配的机器

使用JMeter(以及我使用过的几乎所有其他负载测试工具),您可以相当轻松地使用多台计算机作为负载测试客户端;我还使用JMeter生成基于云的负载


我不完全确定为什么这条经验法则是正确的——但我在多个项目中都观察到了这一点。

1)尝试了多次,但都不适用。有很多动态参数传递给服务,所以像JMeter和WAPT这样的所有工具都不会模拟客户端活动,最终会命中SQL Server缓存并产生最小的负载。2) 当前测试机器与服务器位于同一数据中心的VM上,并且具有4 Gbps NIC。网络不是问题的可能性很高。3) 这正是我想的。我在哪里可以找到一些数字/统计数据来证明这一点?谢谢你的帮助,顺便说一句,我不明白为什么这个问题可能会被投票关闭。性能测试是一门非常有趣的科学。你可能想用这些额外的事实来更新你的问题——它可以帮助那些可能想提供答案的人。我更新了我的答案作为回应。人们投票决定结束讨论,是因为你的问题似乎引起了意见或辩论,而不是事实答案,而不是因为主题不有趣。再次感谢你提供的信息。请你进一步澄清最后一句话好吗?您的意思是“要破坏4核4Gb服务器,我们需要至少拥有两倍以上资源的测试客户机”?我怀疑是这样的,因为当我进行测试时,在某一点上,由于响应时间的增加,请求的数量减少了,内存使用呈指数增长,我开始认为测试工作站会使测试变得混乱。但不确定如何克服这一问题,因为当服务器响应时间较长时,许多服务句柄在内存中等待响应,对此无能为力。是的,这就是我的意思-尽管通常使用多台机器运行测试更容易,而不是一台更大的机器。我正在寻找一种方法来实现服务器基础设施中的一些故障