【发布时间】:2017-05-16 14:29:49
【问题描述】:
我有一个简单的 ASP.NET 应用程序,它只使用 ImageResizer 调整图像大小,而没有做任何其他事情。出于测试目的,我禁用了磁盘缓存,因此每次请求都会调整图像大小。
当我使用 JMeter 测试应用程序的性能时,我得到以下平均响应时间:
- 单个工作进程,1 个并发客户端:~200 毫秒
- 单个工作进程,10 个并发客户端:~1200ms
- 4 个工作进程,10 个并发客户端:~300 毫秒
如您所见,当我运行单个工作进程和 10 个并发客户端时,尽管有可用的硬件资源,但响应时间显着增加:性能测试期间的 CPU 使用率约为 30%,内存使用率约为 150MB。
正如here所讨论的,
网络花园的设计目的只有一个——提供应用程序 不受 CPU 限制但执行长时间运行的请求的能力 扩展而不用尽工作进程中可用的所有线程。
这似乎不是我的情况。
我不明白为什么我会得到这样的结果。我期望的是,即使是单个工作进程也会提供可接受的响应时间,直到它达到资源限制。并且 10 个并发客户端绝对不是一个沉重的负担。谁能给我解释一下,我哪里错了?
我的配置:
- Windows Server 2012 R2
- 具有所有默认设置的 IIS 8.5(MaxWorkerThreads 除外)
- 四核 i3 3.4GHz CPU
- 16 GB 内存
我的应用程序只是带有 ImageResizer 的空 ASP.NET MVC 应用程序,在 this instruction 中添加(选项 3 - 手动安装)并在 Web.config 中禁用了 DiskCache 插件
【问题讨论】:
-
仅根据您提供的这些数字,并且对 ImageResizer 一无所知,看起来 ImageResizer 正在单个线程中运行调整大小操作,也许是 STA?如果它基于不支持多线程的 COM 组件,则可能是这种情况。
标签: asp.net multithreading performance iis