需要在大负载下找到服务器应用程序的性能瓶颈。应用程序由单个服务实例 (.asmx) 和不时通过 http 请求的一些文件组成。我解决这个问题的计划是 1)当服务器以某种方式开始失败时进入异常情况 2)分析性能计数器并在那个时刻记录以推断导致这种情况的调用类型。
为了开始实现这一点,我实现了一个特殊的客户端,它发出两种类型的请求并让它无限期地重复各自的周期,希望在某个时候我会在 WebMethod/GET url 请求期间出错(NB - 标准已经存在的解决方案,如 JMeter 和 WAPT由于服务使用场景的复杂性,不能使用)。到目前为止,我观察到的是服务调用中的响应时间增加以及文件加载期间的一些网络超时异常(使用抛出 OperationCanceledException 的 HttpClient,根据 -这个线程被认为是超时)。顺便说一句,这很奇怪,因为文件大小只有几 kb,服务方法每个请求返回 5-10 mb 的数据。认为“更大”的请求更有可能首先失败。
Perfmon 显示 CPU 负载增加,并且绝对没有内存峰值/泄漏。请求执行时间计数器非常随机,看起来无关紧要,队列长度始终为 0。
也就是说,看起来 IIS 可以很好地处理我的即兴 DDoS,同时使测试方法无效(响应时间增加意味着测试客户端内存中的更多活动请求这会在某些时候导致内存溢出,并且我已经在收到数据后立即刷新数据而没有对其进行任何操作)。
更多细节:服务器机器是 4x3Ghz 内核,4 Gb RAM。我每秒生成 50-100 个请求的负载,这导致 10-20 Mb/秒的带宽(测试客户端位于服务器数据中心内的 VM 上,4 Gbps NIC)。30 分钟的测试会话是服务器和客户端之间约 10-30 Gb 的纯数据传输。
我怎样才能真正让 Web 服务/IIS 关闭?