COM+ 应用程序回收概念

应用程序回收可以通过为已知问题提供快速修复并帮助防止意外问题,来显著提高 COM+ 应用程序的整体稳定性。 例如,由于内存泄漏、不可伸缩的资源使用情况和进程故障等问题,应用程序性能可能会随时间推移而下降。 COM+ 提供应用程序回收来解决这些问题。 可以使用应用程序回收自动关闭进程并重启进程,从而重新初始化失败的进程并重新分配所使用的内存。

应用程序回收的工作原理是创建与应用程序关联的 Dllhost 进程的副本。 此重复 Dllhost 进程处理所有将来的对象请求,从而让旧的 Dllhost 完成剩余对象请求处理。 当检测到对进程中对象的所有外部引用的释放或达到过期超时值时,旧的 Dllhost 进程将关闭。 通过此行为,应用程序回收可确保客户端应用程序不会出现服务中断。

注意

无法回收配置为作为 Windows 服务运行的 COM+ 应用程序。 此外,库应用程序还具有其主机进程的回收和池属性。

 

可以使用组件服务管理工具或通过 COM+ 管理 SDK 以编程方式配置应用程序回收。 可以根据由 Applications 集合中 COMAdminCatalogObject 对象的以下属性确定的多个条件回收进程:

  • RecycleLifetimeLimit。 进程在回收之前可以运行的最大分钟数。 有效范围为 0 到 30,240 分钟(21 天)。 默认分钟数为 0,指示进程在达到生存期限制时不会回收。
  • RecycleMemoryLimit。 回收进程前的最大进程内存使用量(以 KB 为单位)。 如果进程内存使用量超过指定值一分钟以上,则会回收该进程。 有效范围为 0 到 1,048,576 KB。 默认内存使用量为 0 KB,指示进程达到内存限制时不会回收。
  • RecycleCallLimit。 应用程序对象在回收进程之前可以接受的最大调用数。 有效范围为 0 到 1,048,576 次调用。 默认调用数为 0,指示进程在达到调用限制时不会回收。
  • RecycleActivationLimit。 回收进程之前接受的最大应用程序对象激活次数。 有效范围为 0 到 1,048,576 次激活。 默认激活数为 0,指示进程在达到激活限制时不会回收。

此外,COMAdminCatalogObject 对象的 RecycleExpirationTimeout 属性用于强制关闭已回收的进程。 指示在强制关闭进程之前,等待释放对回收进程中对象的所有外部引用的分钟数。 有效范围为 1 到 1440 分钟(24 小时),默认过期超时为 15 分钟。 仅当已确定将基于其他条件回收进程时,才使用此值。

可以选择多个条件来回收应用程序。 满足第一组条件后,COM+ 将回收应用程序。 可以设置过期超时值,以确定旧 Dllhost 进程在强行关闭之前花费多长时间完成剩余的服务请求。

ApplicationInstances 集合提供 HasRecycled 属性,该属性提供一种方法来确定应用程序是否已回收。

COM+ 应用程序回收任务

RecycleSurrogate