我们的某个网站遇到了一个非常奇怪的情况。在某些日子里,整个一天的表现一直很好,而在其他日子里,整个一天的表现一直很慢 例如,每天3000个唯一身份访问者每秒请求一个小页面('get_status.asp')大约10次。在美好的日子,它需要30-40毫秒,在250-500毫秒的糟糕日子。
每天晚上凌晨3点回收应用程序池。
我发现在糟糕的日子里,IIS以单线程模式运行,一次最多执行两个请求,在好日子似乎没有限制
DebugDiag报告显示糟糕的日子:
COM+ STA ThreadPool Report
Max STA Threads 50
Min STA Threads 4
Current STA Threads 4
g_activitiesPerThread 1
EmulateMTSBehavior False
STA Threads In-Call 0 (none)
即使允许50个线程,也只使用4个(2个处理器)。在perfmon中我可以看到很多ASP请求正在排队,导致响应时间变慢(因为Reques等待时间很长)。
在美好的日子里,使用了所有50个线程(参见Current STA Threads
):
COM+ STA ThreadPool Report
Max STA Threads 50
Min STA Threads 4
Current STA Threads 50
g_activitiesPerThread 1
EmulateMTSBehavior False
STA Threads In-Call 0 (none)
一些信息
最让我感到困惑的是明显的随机性:我看到星期一好,星期二不好,周三好,但反过来。有时一周中的每一天都很糟糕,有时整整一个月(!)都很好。
是什么让IIS决定整天使用单线程模式,直到下一个应用程序池回收?
在另一台机器上,我有四个运行的网站(针对不同的URL),每个网站都有自己的应用程序池,但都运行相同的软件。今天我发现这四个中的一个也完全卡在4个线程中,其他人最多可以使用50个线程。