我有一个简单的ASP.NET应用程序,只使用ImageResizer调整图像大小,没有其他操作。为了测试目的,我禁用了磁盘缓存,因此每次请求都会调整图像大小。
当我使用JMeter测试应用程序的性能时,得到以下平均响应时间:
- 单个工作进程,1个并发客户端:约200毫秒 - 单个工作进程,10个并发客户端:约1200毫秒 - 4个工作进程,10个并发客户端:约300毫秒
可以看出,当我运行单个工作进程和10个并发客户端时,尽管硬件资源可用,响应时间显著增加:性能测试期间CPU使用率约为30%,内存使用率为约150MB。
正如此处所讨论的,
“Web garden的设计初衷是为了提供不受CPU限制但执行长时间请求的应用程序扩展能力,并且不会使用工作进程中的所有线程。”
这与我的情况似乎不符。
我不明白为什么会得到这样的结果。我期望即使是单个工作进程,直到达到资源限制之前都能提供可接受的响应时间。而且10个并发客户端绝对不是重负载。有人能解释一下我错在哪里吗?
我的配置:
- Windows Server 2012 R2 - IIS 8.5(除了MaxWorkerThreads之外所有默认设置) - 四核i3 3.4GHz CPU - 16 GB RAM
我的应用程序只是一个空的ASP.NET MVC应用程序,其中添加了ImageResizer(按照this instruction的选项3手动安装),并在Web.config中禁用了DiskCache插件。
当我使用JMeter测试应用程序的性能时,得到以下平均响应时间:
- 单个工作进程,1个并发客户端:约200毫秒 - 单个工作进程,10个并发客户端:约1200毫秒 - 4个工作进程,10个并发客户端:约300毫秒
可以看出,当我运行单个工作进程和10个并发客户端时,尽管硬件资源可用,响应时间显著增加:性能测试期间CPU使用率约为30%,内存使用率为约150MB。
正如此处所讨论的,
“Web garden的设计初衷是为了提供不受CPU限制但执行长时间请求的应用程序扩展能力,并且不会使用工作进程中的所有线程。”
这与我的情况似乎不符。
我不明白为什么会得到这样的结果。我期望即使是单个工作进程,直到达到资源限制之前都能提供可接受的响应时间。而且10个并发客户端绝对不是重负载。有人能解释一下我错在哪里吗?
我的配置:
- Windows Server 2012 R2 - IIS 8.5(除了MaxWorkerThreads之外所有默认设置) - 四核i3 3.4GHz CPU - 16 GB RAM
我的应用程序只是一个空的ASP.NET MVC应用程序,其中添加了ImageResizer(按照this instruction的选项3手动安装),并在Web.config中禁用了DiskCache插件。