1

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

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

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

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

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

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

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

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

4

4 回答 4

2

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

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

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

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

于 2008-12-31T01:33:47.317 回答
2

我们遇到了同样的问题。某些 IIS 应用程序池进程的 CPU 使用率非常高,以至于 Web 服务器上的 CPU 使用率约为 100%。

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

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

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

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/创建了几个新索引。

现在这个案子似乎已经了结。

于 2013-04-03T10:26:37.503 回答
1

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

于 2008-12-30T20:25:04.740 回答
0

Don't eliminate the possibilty of a hardware issue. I had a server running slow and found it to be a motherboard issue. It was replaced under warranty.

于 2008-12-30T22:02:27.163 回答