【发布时间】: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