1

注意:我无法确定这是否更适合 Stack Overflow 或 Serverfault,所以如果您对此有所了解,请告诉我。

背景:最近,我的服务器(Windows 2000、MS SQL 2005、IIS 5.0、ASP Classic)遇到了一组特定 ASP 页面的流量高峰。这个尖峰导致处理器大量消耗,达到 100% 并导致访问者出现各种超时问题。

我们实际上已经处理了比这更大的流量而没有错误。问题似乎是被调用的特定 ASP 脚本使用了大量的处理器时间。使用 Sysinternals 的 Process Explorer,我发现 dllhost.exe 占用了所有处理器时间。查看它的线程,罪魁祸首是对 COMSVCS.DLL 的调用,这似乎是 COM+ 对象。

所以,看起来我的 ASP 页面正在调用 COM+ 对象,它正在杀死我的处理器。

问题是:如何确定 ASP 脚本的哪些部分正在调用 COM+ 对象,以及如何从这些部分开始提高性能?我基本上没有 Windows 编程背景,所以我不知道如何开始。

谢谢你的帮助。

4

2 回答 2

3

COM+ 或 DLLHOST 都不是您的问题,它们只是网站和 COM 对象在其中运行的容器。它们被“馈送”的实际对象是您的问题和/或它们被调用的方式/频率网络应用程序。

隔离问题的一种更有效的方法是查看处理时间最长的页面的 IIS 日志,并让程序员分析该页面中发生的情况以及正在调用的对象。

具体来说,检查 IIS 日志中的“耗时”列。

于 2009-09-23T16:30:52.067 回答
1

For determining what objects are being called, look for

 <OBJECT ID=MyObject RUNAT=SERVER PROGID=MyDll.MyObject></OBJECT>

or

 set myObject = server.createobject("MyDll.MyObject")

inside your ASP pages.

Beware that this could be calling standard DLL (not COM+ objects). The method for instantiation is the same for both types.

If you want to know what COM+ processes are you running, check out the Component Services app.

alt text http://img38.imageshack.us/img38/5062/capturerm.png

于 2009-09-23T18:04:41.987 回答