我们有一个vanilla 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
答案 0 :(得分:1)
高CPU使用率可能是由各种各样的事情引起的。找出正在发生的事情的最简单方法是使用分析工具:
ANTS Memory Profiler:
http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/
ANTS Performance Profiler:
http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/
它们非常实惠,但您应该可以不受试用版本的限制。这些工具在识别瓶颈和内存泄漏方面做得非常出色。