我们有一个普通的 ASP.NET 应用程序(ASP.NET Web 表单、实体框架、SQL Server 2005),没有任何显式的代码多线程。它已部署在临时环境中(操作系统 - Windows Server 2008 R2 64 位,CPU - Intel Xeon E5507 @ 2.27 GHz 2.34 GHz,RAM - 7.5 GB)。该环境由 Web、数据库和报告服务器组成,每个服务器都是云中的单独实例 (Amazon EC2)。在测试并发性时,观察结果如下:
1 个用户 - CPU 使用率 ~25%,响应时间 2-4 秒
2 个用户 - CPU 使用率 40-50%,响应时间 3-6 秒
4 个用户 - CPU 使用率 60-80%,响应时间 4-8 秒
8 个用户 - CPU 使用率 80-100%,响应时间 4-10 秒
我的问题是:
CPU使用率是相对于否。并发用户数?如上述观察所示,响应时间会在很大程度上发生变化?
根据上述观察,当并发用户数约为 10 时,CPU 将被最大化。CPU 不应该在不大幅增加响应时间的情况下无缝处理更多并发用户吗?理想情况下,对于一个基本的 ASP.NET 应用程序,一个 CPU 可以处理多少个并发用户?
如果上述问题是,那么高 CPU/长响应时间可能是什么问题?我们应该通过哪些方式进行有效调试以找出代码/IIS 设置中的瓶颈?
PS:已更改的 IIS 设置(即在 machine.config 中):
maxWorkerThreads = 100
MinWorkerThreads = 50
maxIOThreads = 100
minIOThreads = 50
minFreeThreads = 176
maxConnections = 100