COM+ 跟踪

通过 COM+ 跟踪服务,可以生成自己的管理和诊断程序,以跟踪正在运行的 COM+ 应用程序的状态和性能。 COM+ 跟踪提供有关使用 COM+ 应用程序的统计信息以及状态信息,例如 COM+ 服务器应用程序实例是被暂停还是已回收。 工具可以使用诊断监视中的跟踪信息或用于显示目的。 例如,组件服务管理工具使用 COM+ 跟踪在“COM+ 应用程序”文件夹和“正在运行的进程”文件夹中显示 COM+ 应用程序实例的状态。

COM+ 跟踪计算并定期更新一组常用指标,使此类信息可供需要这些指标的程序使用。 这类似于 COM+ 检测,这两个服务都会自动从 COM+ 应用程序实例收集数据,并向使用者提供此类数据。 但是,这些服务在提供的功能和典型用法方面存在一些重要差异。 下表对这些差异进行了汇总。

COM+ 检测 COM+ 跟踪
细粒度数据。 COM+ 检测服务会向注册的订阅者通知在 COM+ 应用程序实例中发生的单个离散事件(例如调用的方法、对象被销毁)。
聚合数据。 有关 COM+ 应用程序实例的状态和性能,COM+ 跟踪会计算并定期更新常用指标。
事件订阅者通常使用临时算法和策略自行计算指标。
指标由 COM+ 跟踪服务自动计算。 所有使用者都将获得相同的数据,并且不支持自定义指标。
注册订阅后,在发生事件之前,使用者不会收到有关 COM+ 应用程序实例的任何信息。
可以随时检索所有 COM+ 应用程序实例的跟踪数据。
仅支持面向使用者的基于 COM+ 事件的订阅机制。
同时支持基于 COM+ 事件的订阅机制和 COM 本地服务器接口轮询。
示例
调用方法或方法返回时的通知。
平均调用响应时间、最近一段时间内成功或失败的方法调用数、方法调用中当前处于方法调用中的对象数。
将对象添加到对象池或从对象池获取对象时的通知。
池中的对象数、对象总数。
启动、暂停或回收 COM+ 服务器应用程序时的通知。
COM+ 服务器应用程序进程的状态(例如,是被暂停还是已回收)。
事务启动、准备、中止和提交事件的通知。
无等效项。
成功和失败的方法调用级别身份验证尝试的通知。
无等效项。

尽管 COM+ 跟踪在数据范围和计算指标的灵活性方面更加有限,但它提供的指标应该足以满足各种管理和诊断程序的需求。 尽可能使用 COM+ 跟踪,可以简化这些程序的设计。 此外,在生产系统中使用 COM+ 跟踪可能会显著降低性能影响,使其更适合实时监视工具。

COM+ 跟踪如何收集数据

启动 COM+ 服务器应用程序进程后,COM+ 会向跟踪器服务器(系统应用程序的组件)注册进程。 COM+ 库应用程序中的组件和不含组件的服务 (SWC) 上下文也支持跟踪。 在进程中创建库组件或 SWC 上下文时,COM+ 会向跟踪器服务器注册进程(如果尚未注册)。

当进程中发生某些事件(例如创建对象或完成方法调用)时,COM+ 会更新所跟踪进程的统计信息。 更新的数据会定期提交到跟踪器服务器,此时它可供使用者使用。 跟踪器服务器还负责计算 COM+ 应用程序回收和挂起监视功能使用的一些指标。 此类数据也可供使用者使用。

根据生成数据的进程组织跟踪数据。 在此进程中,单个 COM+ 应用程序或组件级别的数据也可供需要此信息的使用者使用。

事件与轮询

COM+ 跟踪支持两种机制,可供使用者从跟踪器服务器、基于 COM+ 事件的订阅机制和 COM 本地服务器接口获取跟踪数据。

需要定期收到跟踪数据更新通知的程序可以注册 IComTrackingInfoEvents 事件接口的订阅。 跟踪器服务器大约每三秒调用一次订阅者的 IComTrackingInfoEvents::OnNewTrackingInfo 方法,以集合对象的形式发送最新的跟踪数据。 此对象实现 IComTrackingInfoCollection 接口,并且订阅者可以导航此集合以查找感兴趣的数据。

出于各种原因,程序对跟踪器服务器进行数据轮询可能更有意义。 例如,监视工具的更新频率可能要低于程序在用户界面中显示状态的频率。 此外,程序可能仅使用可用于系统的跟踪数据的一小部分(例如,工具可能仅监视单个 COM+ 应用程序的实例的性能)。 订阅模型为每个订阅服务器发送每个通知中所有 COM+ 应用程序的跟踪数据,而订阅者负责查找所需的数据。 最后,COM+ 事件是一种尽力事件通知机制。 不会提供可靠的消息传送服务,并且订阅者无法检测到跟踪器服务器未能向其发送通知。

需要更好地控制跟踪数据的检索的程序可以使用跟踪器服务器的 IGetAppTrackerData 接口。