【问题标题】:Sometimes IIS underutilizes a multicore processor有时未充分利用多核处理器
【发布时间】:2011-05-06 14:36:00
【问题描述】:

我在服务器(Windows Server 2008 x64 上的 IIS7,Xeon Quad 处理器)上遇到了我的 ASP.Net 应用程序的奇怪行为。

Web 应用程序是一个简单的页面,大约一秒钟计算一些数学,然后显示结果。即它几乎不消耗网络、磁盘、内存,而是完全使用处理器资源。

在负载测试时出现以下现象:IIS7 使用处理器不超过 25% 并不是全世界都不想使用它。这 25% 等于一个核心,但根据任务管理器性能选项卡分布在所有四个核心上。在另一台计算机(IIS7、Win 7、Quad)上一切正常:处理器全部使用 100%。

对于每个行为变体(4 核处理器上的 25% 和 100% 的峰值负载),我在 2 台计算机上找到了。 here 描述了类似的情况。什么会导致这种行为?

【问题讨论】:

  • 工作进程是否配置为使用多个进程?
  • "最大工作进程" = 1。但在其他具有 4 核且“最大工作进程” = 1 的计算机中,CPU 使用率 = 100%。

标签: asp.net iis multicore stress-testing


【解决方案1】:

我怀疑它已经传播开来了。更有可能算法没有并行化,因此代码在单核中运行。

【讨论】:

  • 算法确实不是并行的。但是负载测试页面请求是并行的。
【解决方案2】:

这 25% 等于一个核心,但是 分布在所有四个根据 任务管理器性能选项卡。

现实检查:当您用完一个内核时,CPU 调度程序将在 2008 R2 之前的内核之间移动负载。从 2008 R2 开始,它将保持在一个核心上,以实际将其他核心移入深度睡眠。

所以,您所看到的基本上是一个使用一个 CPU 内核的应用程序。点。

什么会导致这种行为?

您的代码或您的请求生成(以及您的代码)确保请求是序列化的,而不是并行处理的。

在负载测试期间...您是否接受/保留会话 cookie(例如:ONE)并且在您的 asp.net 页面中是否启用了会话状态?这会将所有页面请求序列化到内存中的一个会话,并且很可能是罪魁祸首。另一个是在代码中做“愚蠢”的事情,结果在一个块中,并使算法有效地单线程 - 但是如果没有更多关于你如何编程和你有效地做什么的信息,这是无法评估的。例如,我曾经见过一群猴子使用保存在应用程序对象中的 ONE 数据库连接(以免数据库过载)编写在线商店,并使用那里的锁定/解锁方法有效地将他们的 asp 应用程序转换为单线程事物。这很明显——但还有很多其他的事情可能会出错。问题基本上是:

  • 您是否正在通过配置/测试方案强制 IIS 进行序列化(这可能属于网络农场设置或会话状态的错误使用)?
  • 您是否在页面中执行任何有效地将它们锁定为单线程的操作?

IIS 本身通过工作项(即使用大量线程)回答请求,除非它 HA 对它们进行序列化(会话一次只分配给一个线程,因此对同一会话的第二个请求被序列化)。

【讨论】:

    【解决方案3】:

    我了解到,在这 2 台负载为 100% 的计算机上,已经安装了 32 位 Windows。在相同的 2 台计算机上,峰值负载为 25% - 64 位。但是自定义更改“启用 32 位应用程序”=true 并没有帮助。

    【讨论】:

      【解决方案4】:

      如果您的服务器正在使用多个工作进程,并且您确定负载测试软件正在并行发出请求,那么您的应用程序中的某些内容可能会变成串行的。

      这实际上很常见(我们为客户做了很多负载测试)——它可以像大小为 1 的数据库池一样简单,也可以像某些共享资源被锁定在应用程序或应用程序正在使用的库中。我们已经看到服务应用程序页面的第一步打开了一个事务,该事务在页面完成之前未提交。如果该事务正在锁定每个其他页面出于相同目的而需要的表,则一次只能处理一个页面请求。

      祝你好运找到问题 - 请务必让我们知道你发现了什么!

      【讨论】:

        【解决方案5】:

        安装较新的操作系统后问题已解决。 “Windows Server 2008 Enterprise SP1 (c) 2009”而不是“Windows Server 2008 Standard SP2 (c) 2007”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-13
          • 2011-06-17
          • 2015-05-26
          • 1970-01-01
          • 2010-10-11
          相关资源
          最近更新 更多