【问题标题】:high cpu in IISIIS中的高cpu
【发布时间】:2008-12-30 19:58:13
【问题描述】:

我正在开发一个 POS 应用程序,它在每台 POS 计算机上都有一个本地数据库,并使用 IIS 中托管的 WCF 与服务器通信。该应用程序已在多个客户中部署了一年多。

大约一周前,我们开始收到一位客户的报告,称托管 IIS 的服务器速度非常慢。当我检查问题时,我看到应用程序池和我的进程在 8 cpu 服务器上几乎达到 100% cpu。

我检查了 SQL 活动监视器和网络容量,它们没有显示超出我们通常看到的明显过载。

在 Process Explorer 中检查线程时,我看到很多线程重复调用 CreateApplicationContext。我已经尝试安装.Net 2.0 SP1,根据我在网上找到的一些帖子,但它没有解决问题并用CLRCreateManagedInstance替换了函数调用。

我将使用 IIS 进程的 adplus 和 windbg 捕获转储并尝试找出问题所在。

有没有人遇到过这样的事情或者知道我应该检查哪个目录?

附言相同版本的应用程序部署在另一个客户中,并且运行良好。我还尝试回滚版本(甚至是非常旧的版本),它的行为仍然完全相同。

编辑:好吧,问题解决了,原来我在那里有一个 SQL 查询,它没有限制结果集,当客户检查了一定数量的行时,它开始让服务器陷入困境。我花了两天时间才找到它,因为日志中的所有周围噪音,但我等了一夜然后转储,它立即向我显示了查询。

【问题讨论】:

    标签: iis cpu-usage


    【解决方案1】:

    通常这与硬件无关,而与 IIS 的配置方式以及一些运行时间稍长的查询(100 多毫秒)有关。

    在您的应用程序池配置下,将您的网络花园设置设置为 20 或更多。

    网络花园设置几乎是可用于处理应用程序请求的线程数。如果它设置为 1,那么单个查询可能会阻止处理其他请求,直到它完成。

    我的应用每天处理近 350 万个请求。当网络花园设置为 1 时,网络服务器 CPU 保持在 100% 并且有很多请求被丢弃。当我将它提高到 50 时,Web 服务器 CPU 下降到略低于 2%,并且没有任何请求被丢弃。

    【讨论】:

    • 我个人对 session 的感觉是,这通常是个坏主意。如果您必须保留某些信息,请使用加密的 cookie。
    • @ChrisLively:将所有内容都放入 cookie 不是一个好主意。它使您的网站容易受到通过它们注入的恶意数据/代码的攻击。
    【解决方案2】:

    我们遇到了同样的问题。一些 IIS 应用程序池进程的 CPU 使用率非常高,以至于 Web Server 上的 CPU 使用率在 100% 左右。

    首先我们使用 DebugDiag 和 ProcMon 来缩小问题范围。见这里:http://www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-high-cpu-in-an-iis-7x-application-pool

    我们在 DebugDiag 分析中发现许多“此线程正在 WaitOne 中等待”消息。这表明请求出于某种原因正在相互等待。所以我们开始寻找共享资源。我们唯一能真正找到的是数据库。所以我们认为,尽管 Web 服务器的 CPU 使用率为 100%,但真正的问题应该是数据库服务器。

    我的同事进一步调查了此案。他做了以下事情:

    1.) 配置 SQL Server 的并行度

    在数据库服务器上使用 ProcMon,他发现 SQL Server 使用了太多的锁和闩锁。看这里:http://blog.sqlauthority.com/2011/02/06/sql-server-cxpacket-parallelism-usual-solution-wait-type-day-6-of-28/

    他将每个查询使用的处理器数设置为 4。默认值为 0(我怀疑这等于可用的处理器数 - 在我们的示例中为 24)。您可以使用 SQL Management Studio 进行设置,方法是右键单击服务器节点本身并选择属性。

    这对减少闩锁和加快请求产生了巨大影响。我们的猜测是 SQL Server 过度使用了查询的并行化,导致完成它们时同步过于繁重。

    2.) 在数据库中创建新的和缺失的索引

    我们在我们的网站上运行了第三方论坛软件,结果证明它根本没有在其数据库中使用任何索引。我的同事利用这里的知识:http://www.mssqltips.com/sqlservertip/1634/using-sql-server-dmvs-to-identify-missing-indexes/ 创建了几个新索引。

    现在案子似乎已经解决了。

    【讨论】:

      【解决方案3】:

      纯粹凭直觉做一个完整的猜测,听起来可能会发生某种异常,异常被 global.asax 中的全局异常处理程序捕获,异常处理程序也导致抛出异常并转储进程。也可能是由于病毒扫描实用程序锁定了某些文件。不过,我可能会WAY

      【讨论】:

      • 我还没有时间检查这个,但是这样的行为会是什么?
      【解决方案4】:

      不要排除硬件问题的可能性。我的服务器运行缓慢,发现是主板问题。已在保修期内更换。

      【讨论】:

      • 我该如何诊断这样的事情?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多