本主题描述 CM Server 的生命周期管理任务。
CM Server 使用两个 J2C 受管连接工厂(一个用于 ClearCase,一个用于 ClearQuest),来启动和控制与 ClearCase 和 ClearQuest 核心产品通信的后端服务器进程。这些 ONCRPC 后端进程(用于 ClearCase 的为 ccrpc 进程,用于 ClearQuest 的为 cqrpc 进程)填补了 CM Server 的 J2EE 和 Websphere 组件与 ClearCase 和 ClearQuest 核心组件之间的鸿沟。
CM Server 执行大量后台任务,以帮助管理和控制已启动的各后端 ONCRPC 服务器进程的完整生命周期;无需管理员干预即可使这些任务运行。
有一个通用生命周期任务执行不特定于产品的生命周期管理,还有一些特定于产品的任务用于控制 ClearCase 和 ClearQuest 后端服务器对象行为。每个任务使用可配置的 MBean 属性来帮助管理活动服务器对象的数量和寿命,以帮助维持系统应对工作负载的能力,以及防止因资源消耗过量而导致性能下降。
有关 MBean 属性以及如何配置这些属性的信息,请参阅设置可用的 MBean 属性。
通用受管连接工厂生命周期管理
通用生命周期管理任务会影响连接工厂创建的所有 ONCRPC 后端进程。此任务在最初启动 CM Server 时从 CM Server 内部启动。该任务每两分钟执行一次,负责测试每个 ONCRPC 后端服务器,以确保每个服务器的支持进程仍在正常运行,并清除已终止服务器进程的残余。
该任务每次执行时,都将获取由 CM Server 启动且标记为 RUNNING 的后端服务器对象的句柄列表。将测试每个后端服务器对象,以确保功能正常的支持进程正在运行。对于检测到运行不正常的任何后端进程,将以如下方式启动服务器对象的清除(日志消息记录此类事件):
- 服务器对象标记为不可运行,这样就不会向该服务器分配新工作。
- 一个 MBean 清除通知将排入队列且在五秒内以异步方式被接收到,并对未在运行的服务器对象执行所有清除工作。
- 将从父级受管连接工厂的服务器对象列表除去这个服务器对象。
- 将注销与该服务器关联的 MBean。
然后,该任务将获取更新后的 STOPPING 服务器(空闲服务器也将如此标记)列表。对于处于 STOPPING 状态已至少 30 秒的每个服务器对象,将检查其支持进程以确保真正停止了该进程。如果服务器对象的进程尚未停止,将强制停止该进程并将其从工厂的服务器列表除去。处于 STOPPING 状态未达 30 秒的服务器将留在工厂的服务器列表中,并在下次执行此任务时检查。
特定于产品的受管连接工厂生命周期管理任务
除通用生命周期管理任务之外,还有一个独立的 ClearCase 任务和一个独立的 ClearQuest 任务可控制其各自后端服务器进程的特定于产品的生命周期管理。
ClearQuest 的后端 oncrpc 服务器(称为 cqrpc 进程)为多线程进程;任意给定时间通常都有少量 cqrpc 进程在运行。ClearCase 的后端 oncrpc 服务器(称为 ccrpc 进程)为单线程进程;任意给定时间通常都有大量此类进程在运行。产品特定的受管连接工厂使用可配置的 MBean 属性来帮助管理活动进程的数量和寿命,以帮助维持系统应对工作负载的能力,同时防止因资源消耗过量而导致性能下降。
ClearCase 受管连接工厂生命周期管理
有一些关键的 MBean 属性,用于管理要启用的 ccrpc 进程数;可能需要根据安装 CM Server 的系统的类型以及期望的服务器用途(根据负载和容量)来修改这些参数的缺省设置:
- CcServerFactoryMBean.serverThresholdCount MBean 属性是 CCRPC 服务器的阈值数;一旦达到该数字,将触发 ClearCase 受管连接工厂内的内联生命周期管理。
- CcServerFactoryMBean.maxServerCount MBean 属性是一次可在 ClearCase 受管连接工厂内创建的 CCRPC 服务器最大数量。
- CcServerFactoryMBean.maxServersPerCredential MBean 属性限制客户机应用程序在每个单独的用户会话内创建过多线程。
可以使用 wsadmin 命令行实用程序调整这些值。有关 MBean 属性以及如何配置这些属性的信息,请参阅设置可用的 MBean 属性。内存大小、处理器速度和其他系统属性之类的参数管理这些值和其他 CcServerFactoryMBean 值的设置方法。
如果 ClearCase 请求从客户机传入 CM Server,将尝试获取后端服务器对象以处理该请求。每个请求到达时,都将执行以下内联检查:
- 将检查 ClearCase 服务器对象列表,以找到空闲服务器来处理请求。如果服务器对象正在处理另一个请求,那么将其视为正忙。如果某个现有服务器对象空闲且与请求的凭证匹配,那么将由该服务器对象来处理该请求。
- 如果现有服务器对象与凭证不匹配或现有服务器对象正忙,就需要新建一个服务器对象并与请求关联;仅当受管连接工厂具有此项功能时,才能执行此操作,如下所示:
- 如果已达到 ccrpc 服务器的 CcServerFactoryMBean.maxServersPerCredential 数,或已达到 ccrpc 服务器的 CcServerFactoryMBean.maxServerCount 数,那么指定来处理客户机请求的工作程序线程将进入等待-重试循环;将最多尝试 TeamServerMBean.maxProcureServerAttempts 次,最长总计 TeamServerMBean.procureServerInterval 秒,以获取服务器。
- 如果无法获取服务器,将拒绝客户机请求。(否则,将新建服务器对象并将其指定给该请求。)
除了在每个请求到达时执行的上述内联检查之外,还有一个特定于 ClearCase 的后台生命周期管理任务执行以下子任务:
每两分钟将创建一个服务器列表,其中包含处于空闲状态达
CcServerFactoryMBean.idleServerInterval 秒或更久的所有 ccrpc 服务器,且该列表中的各服务器都以宽限方式停止,如下所示:
- 服务器实例进入 STOPPING 状态,这样就不会向该服务器分配新工作。
- 一个 MBean TERMINATE 通知将排入队列且在五秒内以异步方式被接收到,并对该服务器对象执行所有清除工作。
- 将向 ccrpc 服务器进程发送一条关闭 RPC 消息,并将服务器实例设置为 STOPPED 状态。
- 当前时间将记录并保存在服务器实例中,这样通用 CheckServer 任务就了解服务器处于 STOPPED 状态已有多久。
- 将从连接工厂的服务器列表除去服务器对象实例。
- 将注销与该服务器关联的 MBean。
ClearQuest 受管连接工厂生命周期管理
ClearQuest 生命周期管理包括:一个每两分钟运行一次的后台任务,以及处理请求时执行的每客户机请求前台检查。执行这些检查是为了确定是否达到了任何临界资源限制:
- 如果启用了基于时间的重新启动(即,如果 CqServerFactoryMBean.recycleServerLifetimeLimit 大于零且任何 cqrpc 服务器对象的运行时间至少为该时间量),那么将把 cqrpc 服务器对象标记为已准备好重新启动。
- 如果完成了一个客户机请求,将进行检查来确定 cqrpc 服务器对象是否至少处理了 CqServerFactoryMBean.recycleServerOncrpcCallLimit 个 RPC 调用。如果是,将把 cqrpc 服务器对象标记为已准备好重新启动。
- 如果客户机请求到达且会话计数已增加,将进行检查来确定 cqrpc 服务器对象是否至少处理了 CqServerFactoryMBean.recycleServerHttpSessionLimit 个 HTTP 会话。如果是,将把 cqrpc 服务器对象标记为已准备好重新启动;在这种情况下,将启动一个新的 cqrpc 服务器对象来处理传入的请求。
ClearQuest 受管连接工厂重新启动 cqrpc 服务器对象,而不是将其终止(而 ClearCase 受管连接工厂则对不再需要的 ccrpc 服务器对象执行终止操作)。原因是 cqrpc 服务器对象可能包含待落实的查询或记录之类的项,因此允许对待落实的任何暂挂工作保留一段宽限期。