RTX64 Monitor(监控功能),是指通过记录应用程序执行期间发生的重要事件,来跟踪实时应用程序的行为。事件被写入磁盘,并在磁盘中分组为会话。每个会话对应一个文件夹,其中包含一个或多个会话期间生成的事件文件。每次启动监控时都会开始一个新会话,停止监控时结束当前会话。
收集监控会话数据后,使用 Tracealyzer 来查看和分析它。
持久性与瞬态性
Persistent(持久)和 Transient(瞬态)这两个词会在 RTX64 Monitor 工具及其相关 API 文档中频繁出现。了解其在 RTX64 Monitor 中的含义非常重要。
- Persistent(持久)指影响全局监控环境的因素。持久更改将被保存并应用于所有未来会话;
- Transient(瞬态)指仅影响当前监控会话的因素。瞬态更改不会被保存,也不会保留到未来的会话中;
在 RTX64 监控环境中,这些概念通常适用于监控事件集和产品组件。
持久事件集与瞬态事件集
监控事件属于两个不同的集合:Persistent Event Set(持续事件集)和 Transient Event Set(瞬态事件集):
- 持久事件集是保留在注册表中的启用/禁用监控事件的集合,使用 RTX64 控制面板进行配置。每次 RTX64 子系统启动时,持久事件集都会成为启用的监控事件;
- 瞬态事件集仅在启用监控时存在。当瞬态事件集存在时,它决定启用/禁用哪些监控事件。启用监控时,瞬态事件集从持久事件集初始化,并使用 RTX64 Monitor 修改。对瞬态事件集的更改不会影响持久事件集。当监控被禁用时,瞬态事件集将被销毁;
持久与瞬态产品组件
通过 RTX64 控制面板或使用下述 API 以编程方式,启用/禁用各个 RTX64 产品组件的事件集。根据使用的 API,对事件集的更改会是持久性的或瞬态性的。
API | 描述 |
---|---|
Real-Time API RtMonitorGetEnabledComponents | 检索当前已启用监控事件的RTX64 产品组件的瞬态配置 |
Real-Time API RtMonitorEnableComponents | 暂时(瞬态性)启用一个或多个 RTX64 产品组件的监控事件 |
Real-Time API RT_MONITOR_COMPONENT | 列举可以暂时(瞬态性)启用/禁用监控事的 RTX64 产品组件 |
Managed Code Framework API Subsystem.GetEnabledComponents | 返回瞬态或持久配置,指定哪些产品组件当前启用了监视事件 |
Managed Code Framework API Subsystem.EnableComponents Method | 一个或多个 RTX64 产品组件监控事件的瞬态性或持久性启用状态切换 |
Managed Code Framework API Subsystem.MonitorComponent Enumeration | 表示可以暂时或永久启用/禁用监视器事件生成的产品组件的枚举。 列举可以瞬态性或持久性启用/禁用监控事件的 RTX64 产品组件 |
使用 RTX64 监控功能
RTX64 Monitor 是一个监控程序,用来动态配置和控制监控会话。RTX64 Monitor 由两个页面组成:
在事件和会话触发器(Events and session triggers)页面,可以:
- 自定义收集的事件列表
- 创建,设置和删除触发器,用以启动和/或停止监控会话
在会话选项(Session options)页面,可以:
- 配置事件集合
- 将会话二进制文件转换为文本文件,以按事件发生的顺序显示事件的详细信息
- 删除会话文件
注意:使用 RTX 监控会导致多达一微秒的延迟。建议仅在开发过程中启用监控,而在生产环境中禁用它。延迟量取决于正在监控的事件种类以及事件在实时应用程序中发生的频率。监控较少类型的事件可以减少对延迟的影响。
注意:RTX64 会收集额外的监控会话数据,用来支持收集预启动触发事件。
注意:本设置仅适用于 RTX64 4.3 及更高的版本。
启动 RTX64 Monitor
从 Windows 开始菜单:
在 Windows 开始菜单中,导航至 RTX64 4.x Runtime,单击 RTX64 Monitor Utility;
从 RTX64 控制面板:
在RTX64 控制面板中,导航至 Configure the RTSS Subsystem -> Change Monitoring settings,单击页面底部的 Open the RTX64 Monitor Utility;
了解监控状态
可以在 RTX64 Monitor 窗口的右上角查看当前状态。
下面列出了五种可能的状态。某些 RTX64 Monitor 设置将处于活动状态或呈灰色显示,具体取决于当前状态。
状态 | 图标 | 描述 | 可执行的操作 |
---|---|---|---|
Not enabled 未启用 | 监控未启用 | 事件和会话触发器: ● 开启一个新会话 注意:在此状态下启动会话可能会导致不确定性。为了避免这种情况,请在开始监控会话之前,通过 RTX64 控制面板启用监控并重启 RTX64 子系统。 会话选项: ● 将数据转换为文本 ● 删除会话文件 | |
Enabled 已启用 | 监控已启用,子系统正在运行,且没有活动会话 | 事件和会话触发器: ● 选择要收集的事件 ● 开启一个新会话 ● 创建,设置和删除下一个会话的启动和停止触发器 会话选项: ● 配置事件收集 ● 将数据转换为文本 ● 删除会话文件 | |
Running 运行中 | 正在进行活动的监控会话 | 事件和会话触发器: ● 选择要收集的事件 ● 创建,设置和删除下一个会话的停止触发器 注意:会话进行时,不能添加,设置或删除启动触发器。 ● 暂停或停止正在进行的会话 会话选项: ● 配置事件收集 ● 将数据转换为文本 ● 删除会话文件 | |
Paused 已暂停 | 当前监控会话已暂停 | 事件和会话触发器: ● 选择要收集的事件 ● 创建,设置和删除下一个会话的启动和停止触发器 注意:监控会话暂停时,会话触发器不起作用。 ● 恢复或停止已暂停的会话 会话选项: ● 配置事件收集 ● 将数据转换为文本 ● 删除会话文件 | |
RTX64 Subsystem is stopped RTX64 子系统已经停止 | 子系统已停止。必须先通过 RTX64 控制面板启动子系统,才能启动监控会话 | 事件和会话触发器: ● 所有功能均呈现灰色 会话选项: ● 将数据转换为文本 ● 删除会话文件 |
启动,暂停和停止监控会话
使用 RTX64 Monitor 窗口右下角的会话控件来启动,暂停和停止监控会话。
控制图标 | 动作 | 状态 |
---|---|---|
启动一个新的监控会话 注意:该操作需要子系统处于运行状态。 注意:在此状态下启动会话可能会导致不确定性。为了避免这种情况,请在开始监控会话之前,通过 RTX64 控制面板启用监控并重启 RTX64 子系统。 | 当会话启动后,监控状态变为 Running(运行中)。状态文本包括子文件夹名称。 子文件夹名称的格式为 YYYYMMDD_HHMMSS_NNN,其中 NNN 是 000 到该秒内启动的监控会话总数之间的整数。 每次开始监视时,都会创建一个新的会话文件夹。 | |
暂停活动会话 | 当会话暂停时,监控状态将更改为 Paused(已暂停)。 | |
恢复暂停的会话 | 当会话恢复时,监控状态变为 Running(运行中)。 | |
停止活动会话 | 当会话停止时,监控状态将变更为 Enabled(已启用)或 Not Enabled(未启用)。 具体取决于 RTX64 控制面板中是否启用了监控。 |
自定义事件收集
如下图,在 RTX64 Monitor 事件和会话触发器页面中,通过选择/清除左侧的事件收集选择树形列表中各事件的复选框状态,可以随时更改监控会话中要收集的事件。
默认情况下,树形列表中的事件选择与 RTX64 控制面板的更改监控设置(Change Monitoring Settings)页面中列出的事件选择相同。对 RTX64 Monitor 中事件选择的更改会立即生效,并在子系统运行时以及 RTX64 控制面板启用监控时保持有效。
注意:在 RTX64 Monitor 中对事件收集所做的更改仅影响瞬态事件集。不会影响控制面板中的持久设置。
注意:如果配置了触发器(参阅管理会话触发器),则必须在选择要收集的事件(Choose events to collect)树中,选择与触发器关联的事件,才能使触发器生效。如果没有选择与触发器关联的事件,则触发事件将不会产生任何影响。没有选择与收集的事件相关联的触发器在触发器列表中用此图标指示:
收集监控会话中的事件
要收集监控会话中的事件,需要在选择要收集的事件(Choose events to collect)树中选择该事件。
注意:选择顶级事件组,如关键部分(Critical Sections)将会选中该组中的所有事件。
下面的示例中,选择了关键部分(Critical Sections)事件组,该组内的所有事件将收集在监控会话中:
注意:单击树形列表下方的全选(Select all)选择收集所有事件。
从监控会话中排除事件
要从监控会话中排除某个事件,在选择要收集的事件(Choose events to collect)树中,取消选择该事件的复选框。
下面的示例中,未选择关键部分离开(Critical Sections Leave)事件,监控会话中将不会收集该事件:
注意:取消选择顶级事件组,如关键部分(Critical Sections)将会取消该组中的所有事件。
下面的示例中,清除了关键部分(Critical Sections)事件组,该组内所有事件同时清除。该组内的所有事件都不会在监控会话中收集:
注意:单击树形列表下方的全部清除(Clear all)取消选择收集所有事件。
过滤事件
要过滤选择要收集的事件(Choose events to collect)树,在右侧搜索框中输入关键词。将列出包含该关键词的监控事件。要删除当前过滤器,删除该关键词。
下面的示例中,搜索关键词 create 将显示 Create 相关的事件:
管理会话触发器
在 RTX64 Monitor 中的事件和会话触发器(Events and session triggers)页面,将监控事件与会话触发器关联,来自动启动和/或停止事件收集。
关于会话触发器
RTX64 Monitor 支持两种会话触发器:
- 当实时应用程序中发生关联事件时,启动触发器(start trigger)会自动启动事件收集
- 当实时应用程序中发生关联事件时,停止触发器(stop trigger)会自动停止事件收集
根据监控状态,启动和停止触发器选项会处于活动状态或呈灰色(非活动状态)。
状态 | 可执行的操作 |
---|---|
Not enabled 未启用 | 不能更改会话触发器 |
Enabled 已启用 | 创建,设置和删除下一个会话的启动和停止触发器 |
Running 运行中 | 创建,设置和删除下一个会话的停止触发器 注意:会话进行时,不能添加,设置或删除启动触发器。 |
Paused 已暂停 | 创建,设置和删除下一个会话的启动和停止触发器 |
注意:上述状态假设子系统已启动。当子系统未启动时,事件和会话触发器(Events and session triggers)页面上的所有功能均呈灰色显示。
创建会话触发器
可以从收集的事件或事件组创建触发器。将事件/组从选择要收集的事件(Choose events to collect)树拖到启动触发器(创建启动触发器)或停止触发器(创建停止触发器)区域。
注意:当监控会话运行(处于 Running 状态)时,只能配置停止触发器,启动触发功能呈灰色显示。详细信息,参阅了解监控状态。
为单个事件创建会话触发器:
- 在选择要收集的事件(Choose events to collect)下,单击要创建触发器的事件;
- 执行以下操作之一:
- 要为该事件创建启动触发器,将事件拖放到启动触发器(start trigger)区域;
- 要为该事件创建停止触发器,将事件拖放到停止触发器(stop trigger)区域;
在下面示例中,关键部分进入(Critical Sections Enter)事件被拖放到启动触发器区域,从而为该事件创建启动触发器:
- 单击设置开始触发器(Set Start Triggers),将新触发器应用于下一个监控会话。
注意:新会话可能会立即开始,具体取决于所选的事件。
为事件组创建会话触发器:
- 在选择要收集的事件(Choose events to collect)下,单击要创建触发器的事件组名称;
- 执行以下操作之一:
- 要为该事件组创建启动触发器,将事件拖放到启动触发器(start trigger)区域;
- 要为该事件组创建停止触发器,将事件拖放到停止触发器(stop trigger)区域;
在下面示例中,关键部分(Critical Sections)事件组被拖放到启动触发器区域,从而为组中的所有事件创建启动触发器:
- 单击设置开始触发器(Set Start Triggers),将新触发器应用于下一个监控会话。
注意:新会话可能会立即开始,具体取决于所选的事件。
注意:取消选择要收集的事件(Choose events to collect)复选框,则与该组中的所有事件关联的触发器失效。
为自定义事件创建会话触发器
为所有自定义事件或指定 ID 的单个自定义事件创建触发器。
为所有自定义事件创建会话触发器:
- 在选择要收集的事件(Choose events to collect)下,单击自定义事件(Custom Events)组名称;
- 执行以下操作之一:
- 要为所有自定义事件创建启动触发器,将自定义事件(Custom Events)组拖放到启动触发器(start trigger)区域;
- 要为所有自定义事件创建停止触发器,将自定义事件(Custom Events)组拖放到停止触发器(stop trigger)区域;
注意:自定义事件组触发器,将替换该类型触发器(启动或停止)中所有单个自定义事件触发器(参阅下方为单个自定义事件 ID 创建触发器(To create a trigger for a single Custom Event ID))。
在下面示例中,自定义事件(Custom Events)组被拖放到启动触发器区域,创建了一个自定义事件(Custom Events):当应用程序中发生自定义事件时,所有启动触发器都会执行:
- 单击设置开始触发器(Set Start Triggers),将新触发器应用于下一个监控会话。
注意:新会话可能会立即开始,具体取决于所选的事件。
为单个自定义事件 ID 创建会话触发器:
- 在选择要收集的事件(Choose events to collect)下,展开自定义事件(Custom Events)组;
- 单击并按住拖动并通过自定义 ID 创建触发器(Drag to create trigger by custom ID);
- 执行以下操作之一:
- 要为自定义事件 ID 创建启动触发器,将拖动并通过自定义 ID 创建触发器(Drag to create trigger by custom ID)拖放到启动触发器(start trigger)区域;
- 要为自定义事件 ID 创建停止触发器,将拖动并通过自定义 ID 创建触发器(Drag to create trigger by custom ID)拖放到停止触发器(stop trigger)区域;
注意:如果该触发器类型(启动或停止)的自定义事件已存在,则无法创建自定义事件 ID 触发器。
- 输入触发器的自定义事件的 ID(0-999,含)。该 ID 对应API RtGenerateEvent 中的 kind 参数,用来生成自定应事件。
在下面示例中,拖动并通过自定义 ID 创建触发器(Drag to create trigger by custom ID)被拖放到开始触发器区域,并输入了自定义 ID 1。这将创建一个自定义事件(Custom Event):当应用程序中发生与值 1 对应的自定义事件时,自定义事件 ID 启动触发器就会执行:
- 单击设置开始触发器(Set Start Triggers),将新触发器应用于下一个监控会话。
注意:新会话可能会立即开始,具体取决于所选的事件。
理解会话触发器状态指示图标
选择要收集的事件(Choose events to collect)树使用图标指示已设置了启动/停止触发器的关联事件。
图标 | 含义 |
---|---|
事件与已设置的启动触发器关联。 | |
事件与已设置的停止触发器关联。 |
在下面示例中,启动触发器与关键部分进入(Critical Sections Enter)事件关联,停止触发器与关键部分离开(Critical Sections Leaves)事件关联。 这些触发器关联由树中的开始和停止图标指示:
删除会话触发器
使用以下方法删除会话触发器:
删除单个会话触发器:
- 选择要删除的会话触发器,然后单击删除图标
删除同类型的所有会话触发器:
- 单击开始/停止触发器区域上方的全部删除(Delete all);
- 在确认对话框中,单击全部删除(Delete all)。
监控会话选项
监控会话选项包括:
- 配置事件收集
- 将会话二进制文件转换为文本文件,并按事件发生顺序显示详细信息
- 删除会话文件
注意:子系统停止时,对监控会话所做的更改将会丢失。
配置事件收集
在配置事件收集(Configure event collection)部分,可以更改收集事件的最大数量,以及是否要收集预启动触发器事件。这些设置会覆盖 RTX64 控制面板中的默认配置。
注意:监控会话运行时,无法更改设置。
设置 | 描述 | 执行…… |
---|---|---|
Maximum number of events to collect 收集事件的最大数量 | 配置监控会话中要收集的最大事件数 | 选择一个单选按钮: ● Unlimited(无限制):默认选项,收集事件直至监控会话手动停止; ● Only collect this many events(仅收集这么多事件):指定监控会话要收集的最大事件数的值。默认值为 20,000 个 |
Number of pre-start-trigger events to collect 收集的预启动触发器事件数量 | 配置要收集的预启动触发器事件数量(如果有)。预启动触发器事件是在触发监控会话开始之前发生的事件。 注意:至少要设置一个会话启动触发器。未设置时显示为灰色。 | 指定监控会话期间要收集的预启动触发器事件的数量。默认值为 0(不收集)。 当设置为非零值时,启动触发器之前发生的所有超过该值的事件将不会被保存。 注意:当收集事件的最大数量(Maximum number of events to collect)设置为仅收集这么多事件(Only collect this many events)时,要收集的预启动触发器事件数不得超过该数量。 |
Include network events 包括网络事件 | 确定是否在下一个监控会话中收集网络相关事件,例如网络抽象层 (NAL) 和 RT-TCP/IP 栈事件。 | 要在下一个监控会话中包含网络相关事件,选中包含网络事件(Include network events)复选框。 要从事件收集中排除与网络相关的事件,取消选中该复选框。 |
将会话数据转换为文本
在会话数据转换为文本(Convert session data to text)部分,可以将监控数据从监控会话文件 (.monx) 转换为可读日志文件 (.txt),并删除不再需要的旧会话。
注意:如果会话包含大量数据,转换可能需要一些时间。
注意:不能转换正在更新的会话文件。执行此操作将导致错误。要从活动会话转换监控数据,必须先停止监控。
转换会话文件:
- 在选择要转换的会话文件(Choose the session file to convert)字段中,指定要转换的监控会话文件 (.monx) 。单击浏览(Browse)导航至该会话文件;
- 指定输出文本文件(Specify the output text file)(.txt)。默认情况下,输出文件保存在转换日志所在的文件夹。单击浏览(Browse)更改默认位置;
- 单击转换文件(Convert File)。
转换完成后,文本文件会在默认文本编辑器中显示。每个文本文件大小为 500 MB,格式为 YYYYMMDD_HHMMSS_xxx.N.txt,其中 N 表示从 1 到包含原始二进制文件中的信息所需的 500 MB 文本文件数的整数。
删除会话文件夹
如果空间不足,可以手动删除会话文件夹以释放空间。
删除会话文件夹:
- 选择要删除的会话文件夹(Choose the session folder to delete)。单击浏览(Browse)导航到要删除的会话文件夹;
子文件夹命名约定为 YYYYMMDD_HHMMSS_NNN,其中 NNN 是 000 到该秒的监控会话总数之间的整数。
- 单击删除文件夹(Delete Folder)。