我在生产服务器上有一个奇怪的情况。asp.net 的连接已排队,但 CPU 仅占 40%。此外,数据库在 30% 的 CPU 下运行良好。
评论中要求的更多历史记录:
- 在高峰时段,这些网站每小时约有 20,000 名访问者。
- 该站点是一个带有大量 AJAX/POST 的 asp.net 网络表单应用程序
- 该网站使用大量用户生成的内容
- 我们使用一个测试页面来衡量网站的性能,该页面确实会命中数据库和网站使用的 Web 服务。此页面在正常负载下会在一秒钟内提供服务。当请求超过 4 秒时,将应用程序定义为慢。
- 从测量中我们可以看到连接时间很快,但处理时间很大。
- 我们无法确定单个请求的缓慢响应,该站点在正常时间运行良好,但在高峰时间变慢
- 我们有一个问题是该站点受 CPU 限制(也就是以 100% 运行),我们修复了该问题
- 我们还遇到了导致 appdomain 重新启动的异常问题,我们修复了这个问题
- 在高峰时段,我会查看 asp.net 性能计数器。我们可以看到我们有 600 个当前连接和 500 个排队连接的行为。
- 在高峰时间,CPU 大约是 40%(这让我认为它不受 CPU 限制)
- 物理内存使用率约为 60%
- 在高峰期,DatabaseServer CPU 大约是 30%(这让我觉得它不受数据库限制)
我的结论是,其他东西正在阻止服务器更快地处理请求。可能的嫌疑人
- 死锁(!syncblk 只提供一个锁)
- 磁盘 I/O(通过 sysinternals procesexplorer 检查:3.5 mB/s)
- 垃圾收集(高峰期 10~15%)
- 网络 I/O(连接时间仍然很短)
为了找出过程在做什么,我创建了小型转储。
我设法创建了两个相隔 20 秒的 MemoryDump。这是第一个的输出:
!threadpool
CPU utilization 6%
Worker Thread: Total: 95 Running: 72 Idle: 23 MaxLimit: 200 MinLimit: 100
Work Request in Queue: 1
--------------------------------------
Number of Timers: 64
和第二个的输出:
!threadpool
CPU utilization 9%
Worker Thread: Total: 111 Running: 111 Idle: 0 MaxLimit: 200 MinLimit: 100
Work Request in Queue: 1589
如您所见,队列中有很多请求。
问题1:队列中有1589个请求是什么意思。这是否意味着有东西阻塞?
!threadpool 列表主要包含以下条目: Unknown Function: 6a2aa293 Context: 01cd1558 AsyncTimerCallbackCompletion TimerInfo@023a2cb0
如果我深入了解 AsyncTimerCallbackCompletion
!dumpheap -type TimerCallback
然后我查看 TimerCallback 中的对象,其中大多数是类型:
System.Web.SessionState.SessionStateModule
System.Web.Caching.CacheCommon
问题 2:这些对象有一个计时器是否有意义?我是否应该阻止这种情况。如何?
主要问题我是否错过了任何明显的问题,为什么我要排队连接而不是最大化 CPU?
我成功地在高峰期进行了崩溃转储。用 debugdiag 分析它给了我这个警告:
Detected possible blocking or leaked critical section at webengine!g_AppDomainLock owned by thread 65 in Hang Dump.dmp
Impact of this lock
25.00% of threads blocked
(Threads 11 20 29 30 31 32 33 39 40 41 42 74 75 76 77 78 79 80 81 82 83)
The following functions are trying to enter this critical section
webengine!GetAppDomain+c9
The following module(s) are involved with this critical section
\\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\webengine.dll from Microsoft Corporation
快速谷歌搜索没有给我任何结果。有人有线索吗?