【问题标题】:How to increase Requests/second with a constant execution time for Asp.NET?如何在 Asp.NET 的恒定执行时间下增加请求/秒?
【发布时间】:2012-12-17 10:33:15
【问题描述】:

我有一个 Web 应用程序,由于在中等流量下 requests/sec 较低,因此受到影响。每页的平均请求执行时间约为 200 毫秒。

为了模拟环境,我用一行代码在 Asp.NET 4.0 Web 应用程序中创建了一个超级简单的测试页面。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    System.Threading.Thread.Sleep(200)
End Sub

我将它发布到具有 4 核 cpu、8GB RAM、Win7 Enterprise 64 位、全新安装的服务器。

然后我创建了一个超级简单的控制台应用程序,它会在这个测试页面上增加一些负载。

    For i = 1 To 100
        For j = 1 To 100
            Dim client = New System.Net.WebClient

            client.DownloadStringAsync(New Uri(address))
        Next
        Threading.Thread.Sleep(1000)
    Next

我打开了性能监视器并观察了每秒请求数。无论我试图做什么来增加它,它总是 50。所有硬件使用率(CPU、内存)都非常低,所以必须有足够的空间来增加它。

我更改了 machine.config 中的 processModel 如下,但没有成功。

<processModel autoConfig="false" maxWorkerThreads="1000" maxIoThreads="1000" minWorkerThreads="500" minIoThreads="500" />

那么,我需要做些什么来利用我的全部硬件并增加每秒处理的请求数?

【问题讨论】:

  • 您需要在处理时间过长的页面上禁用会话 - 或者进行也需要一些时间的下载/上传。
  • @Aristos 会话被禁用,所有不必要的 httpmodules 已被删除,如会话、windowsauthentication、passportauthentication、urlauthorization、fileauthorization 等。Web 服务器和控制台应用程序位于同一网络上。测试环境只是一个空的 Asp.NET Web 应用程序,其中包含一个测试页面。
  • 好的,那么延迟在哪里 - 你知道什么是延迟你的页面吗?
  • @Aristos 我故意将延迟添加到 Page_Load 中添加行 Thread.Sleep(200) 以模拟常规页面处理时间。我的问题是如何以相同的页面处理时间增加请求/秒。为什么 IIS 或 Asp.NET 引擎不使用所有可用的 cpu 来满足更多请求?
  • 你有没有尝试给一个池子提供更多的线程 - 做一个网络花园?

标签: asp.net performance execution-time requests-per-second


【解决方案1】:

如果您只在服务器端使用单个线程,您将获得每秒 1000/200 = 5 个请求。但是你得到了 50 个。所以看起来服务器允许你拥有多个线程,只是数量不够。

或者您的客户端应用程序可能没有启动足够的线程来最大化服务器。这里的部分问题是您同时测试两个应用程序。

对此的一种解决方案是使用久经考验的网络性能工具。这是一个关于 SO 的问题,它会给你一些选择:

ASP.NET Stress Testing

一旦您确定问题出在您的服务器端应用程序上,请告诉我们,我们可以进一步调查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多