题
我有一个网络应用程序,有时会因负载过大而挂起。为了让它回来,我必须杀死“dllhost.exe”进程。 有人知道该怎么做吗?
这是一个带有大量 COM+ 对象的经典 ASP (VBScript) 应用程序。
服务器具有以下配置:
- 英特尔酷睿 2 双核 2.2 GHz / 4 GB RAM
- Windows Server 2003 网络版 SP2
- IIS 6.0
事件日志中存在一些与 COM 对象相关的错误。但是为什么 COM 对象中的错误会导致整个服务器崩溃呢?
COM 对象是部署为 COM 对象的 PowerBuilder 对象。
IIS 7.0 比 IIS 6.0 稳定吗?
解决方案
听起来像是狡猾的 COM 对象导致了这个问题..您是否将它们加载到“应用程序”中?如果加载,那么它们是线程安全的吗?或者它们是否在每次请求时被使用和丢弃?
是的,每隔几个小时回收一次将有助于“隐藏”问题,但应该正确调试和修复它们......您是否尝试过分而治之来发现哪个 COM 对象有问题...我可以想象这在生产环境中很棘手,因此您需要设置一些繁重的自动化测试来在本地重现问题,然后您可以采取一些措施。
其他提示
你有内存泄漏:)
这篇博客文章是我的 IIS 故障排除圣经:
http://blogs.msdn.com/david.wang/archive/2005/12/31/HOWTO_Basics_of_IIS6_Troubleshooting.aspx
如果您无法审核代码并找到引用泄漏的位置,另一种方法是通过每 24 小时左右重新启动 IIS 来回收应用程序。您只需将命令行脚本设置为服务器作业即可执行此操作。
您的事件日志中的“应用程序”和“系统”类别下可能存在一些错误。尝试找到这些错误的根源或将它们发布在这里,我们将看看我们能做什么:)
编辑 :@Daniel Silveira可能会泄漏。您使用什么 COM+ 对象?我在使用我支持的应用程序时遇到一些问题。