IIS Classic ASP随机运行单线程

时间:2014-02-10 12:25:00

标签: multithreading iis asp-classic

我们的某个网站遇到了一个非常奇怪的情况。在某些日子里,整个一天的表现一直很好,而在其他日子里,整个一天的表现一直很慢 例如,每天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) 

一些信息

  • 服务器是VM-Ware ESXI上的Windows 2003 R2。 2 CPU分配,2GB内存
  • 负载在一天中非常均匀地分布。在最繁忙的时刻,大约有25个请求/秒。 CPU的运行速度很好,为25%,内存使用量为750MB(可用2GB)
  • 该网站仅使用经典ASP。没有涉及ASP.NET。
  • 服务器端ASP调试似乎能够导致这种情况。但是,它已关闭(我从未使用它,当然不在生产服务器上)
  • 在应用程序或会话变量中存储COM对象似乎能够导致此问题。我们使用Application和Session变量,但只存储字符串和数字等基本类型。

最让我感到困惑的是明显的随机性:我看到星期一好,星期二不好,周三好,但反过来。有时一周中的每一天都很糟糕,有时整整一个月(!)都很好。

是什么让IIS决定整天使用单线程模式,直到下一个应用程序池回收?

更新

在另一台机器上,我有四个运行的网站(针对不同的URL),每个网站都有自己的应用程序池,但都运行相同的软件。今天我发现这四个中的一个也完全卡在4个线程中,其他人最多可以使用50个线程。

0 个答案:

没有答案