一种分布式系统环境下的多任务进程监视方法和监视系统 技术领域 本发明涉及一种任务进程监视技术, 特别是一种分布式系统环境下的多任务进程 监视方法和多任务进程监视系统。
背景技术 随着现代计算机和通讯网络技术的成熟和发展, 现代信息系统的构建方式和体系 结构也从原来的简单集中处理方式向更高效的分布式架构转变, 这种趋势导致从注重程序 设计转向更复杂系统功能的集成, 以及如何把各层面业务模块进行组装, 使其协同工作。
基于分布式任务处理的业务流程管理系统是一种面向流程的信息系统, 主要基于 网络方式实现信息传递、 数据同步、 流程监控和业务流程的持续管理优化等功能。业务流 程管理的提出避免了把工作流固化在定制的应用程序中, 支持从程序设计到应用组装的转 变, 此外还支持面向流程、 流程再设计以及组织增长 (organic growth)。
目前使用广泛的工作流程管理系统有 Staffware、 MQSeries 和 COSA, 案例处理系 统 FLOWer, ERP 系统也提供了工作流程管理的模块, SAP、 Baan、 PeopleSoft、 Oracle 和 JD Edwards 的工作流引擎也可被视为集成的业务流程管理系统。然而对工作流程的监控只是 作为单一的模块集成在系统中, 在不同环境下的流程监控缺乏统一的标准, 有的尚不具备 流程监控能力, 更可惜的是多数工作流管理系统基于不同范例 (paradigms) 使用多种语言 和概念, 各类工具间的使用方式存在差异, 这样使其相应功能的扩展和易用性受到限制。 本 发明提出了一种建立在业务流程管理系统之外通用的流程监控体系, 使其脱离了各工作流 程管理系统间的限制, 同时提出了一种多任务调度策略, 使其对大型分布式任务处理环境 下海量任务流程的实时监控问题提供了一种有效的解决方法。
发明内容
本发明的目的在于提供一种分布式系统环境下的多任务进程监视方法和监视系 统, 通过对分布式终端各任务状态的自动采集, 经多线程任务调度策略对计算资源进行合 理的分配, 从而实现多任务进程监视的快速响应。
本发明公开了一种分布式系统环境下的多任务进程监视方法, 包括以下步骤 :
第一步, 对分布式系统环境下的各任务执行终端的任务执行进程的五种状态进行 监视, 所述五种状态包括就绪、 等待、 挂起、 创建、 消失五种 ; 根据任务执行进程的状态顺序 地将各任务执行阶段的任务执行情况与之相应的定义为五类 : 任务准备、 任务等待、 任务中 断、 任务执行、 任务结束 ; 将进程监视获取到的任务执行情况通过格式化的 XML 描述文件进 行保存 ;
第二步、 将所述 XML 格式描述文件传输到任务汇集处理服务器进行数据的汇总检 验, 过滤掉冗余和异常数据, 将过滤后的任务执行情况写入数据库, 同时发送任务变化消息 通知任务调度中心 ;
第三步, 任务调度中心收到任务变化消息后将这些消息直接提交到任务调度模块, 任务调度模块将收到的消息加入消息等待队列, 调度控制单元对消息等待队列进行实 时扫描在发现消息后按照先进先出的原则进行响应 ;
第四步, 调度控制单元响应到任务变化消息后, 查找线程索引表获取该任务的执 行线程并交由该线程执行, 如在线程索引表中未查询到该任务对应的执行线程则根据任务 等级添加到调度控制单元中消息等待队列等待线程的分配, 并将已经分配线程执行的任务 送往工作线程池执行 ;
第五步, 线程控制模块在系统运行过程中实时对工作线程池中的多线程进行监 视, 并根据当前系统负载状态通过容量调节单元对线程池中线程数量进行相应的增减使计 算资源达到最优的负载平衡, 同时对长时间未执行的线程进行删除, 同时对工作异常的线 程进行回收。
本发明中, 调度控制单元执行以下步骤实现任务调度 :
步骤 1、 根据接收到的任务变更消息解析出该任务的任务标识, 根据任务标识遍历 线程索引链表获取该任务与之对应的工作线程, 转到步骤 5 ; 如果未查询到该任务的工作 线程, 转到步骤 2 ;
步骤 2、 遍历线程索引表, 通过对线程索引表中各任务标识进行纵向遍历从而获取 未分配任务的空闲线程, 转到步骤 5 ; 如果仍未有空闲的工作线程, 转到步骤 3 ;
步骤 3、 将该消息加入调度控制单元中的消息等待队列, 并按照任务等级进行排 序, 任务等级计算公式如下 : , 其中 : R 表示任务优先级, 取值范围 1 ~ 9 ; J 表示任务执行阶段的关键程度, 取值范围 1 ~ 9 ; , 表示任务优先级和任务执行阶段的关键程度各自权值 ;
p 表示计算出的任务等级 ;
步骤 4、 调度控制单元实时扫描等待队列, 并返回步骤 2 ;
步骤 5、 根据分配到的工作线程标识和任务变更消息中的任务标识编辑该任务的 执行消息并发送至工作线程池执行, 任务调度结束。
本发明中, 线程池执行如下步骤 :
步骤 1、 创建工作线程池, 根据预设的线程池容量创建相应数量的工作线程, 同时 为每个工作线程开辟与之对应的消息队列, 线程运行过程中实时扫描该消息队列获取任务 参数完成数据计算以及数据显示等操作 ; 步骤 2、 创建线程索引表, 线程索引表以链表形式将任务标识、 线程标识、 下级节点 地址以及线程消息队列的对应关系进行保存, 遍历工作线程池将各线程标识和相对应的消 息队列加入线程索引表中 ;
步骤 3、 工作线程池将调度控制单元送来的任务执行消息经解析获取要送往执行 的线程标识, 根据线程标识获取线程索引链表中该节点地址 ;
步骤 4、 根据获取的节点地址, 将任务执行消息送往该链表节点所指向的消息队列 等待线程执行, 同时修改该链表节点的任务标识 ;
步骤 5、 当线程消息队列中所有消息执行完成后, 将该节点中任务标识清空恢复初 始状态, 任务执行结束。
利用多线程技术创建系统工作线程池以及线程索引表, 并根据各工作线程所执行 的任务信息实时更新线程索引表, 当任务监视信息送往工作线程池等待线程分配时根据执 行任务的优先级、 监视节点的关键程度对待执行任务进行等级确定并按由高到低的原则建 立任务等待队列, 当等待队列中任务执行时, 对线程索引表进行遍历确定执行该任务的工 作线程, 并送往相应线程的消息队列等待执行。
本发明中, 所述容量调节单元执行以下步骤实现容量调节 :
步骤 1、 计算某个时间段 CPU 工作时间计算 CPU 使用率 :
对于单核 CPU 计算公式为 : (T-I)/T*100%, 其中, T 表示某个时间段, I 表示在这 个时间段中 CPU 处于空闲状态的时间 ;
对于多核 CPU 计算公式为 : (T*N-I)/T*N*100%, 其中, T 表示某个时间段, I 表示 在这个时间段中全部 CPU 核心的总空闲时间的和, N 表示 CPU 到核心数量 ;
容量调节单元实时对 CPU 使用率进行监测, 如果监测某一时间段 CPU 使用率一直 大于 50%则认为系统负载过重需减小线程池容量执行步骤 3 ; 如果监测某一时间段 CPU 使 用率一直小于 30%则认为系统负载过轻需增加线程池容量提升系统处理能力执行步骤 2 ; CPU 使用率保持在 30%~ 50%之间则认为系统工作比较稳定对线程池容量不进行操作。 步骤 2、 增加线程池容量, 创建工作线程以及对应的线程响应队列同时根据线程标 识在线程索引表中增加响应节点 ;
步骤 3、 减少线程池容量, 释放线程池中空闲线程并将线程索引表中该线程所在节 点删除。
本发明还公开了一种多任务进程监视系统, 包括多个分布式任务执行终端、 任务 汇集处理服务器以及任务调度中心 ;
所述分布式任务执行终端与任务汇集处理服务器之间通过 XML 格式描述文件传 输任务执行情况 ;
所述任务调度中心包括任务调度模块、 工作线程池以及线程控制模块 ;
所述任务调度模块用于接收所述任务汇集处理服务器传来的任务变更消息, 其包 括任务控制单元和消息等待缓冲区 ; 所述消息等待缓冲区用于存放消息 ; 所述任务控制单 元用于扫描消息并做出响应 ;
所述工作线程池用于处理任务, 其包括线程索引表, 线程控制单元、 任务控制单元 以及任务执行单元 ; 所述线程索引表包括任务标识、 线程标识、 下级节点地址以及线程消息 队列 ; 所述线程控制单元用于对各工作线程的创建和释放 ; 所述任务控制单元用于对线程 索引表中各线程所对应的线程消息队列进行扫描并将获取的消息送往任务执行单元执行 ; 所述任务执行单元用于对送达的任务变更消息进行响应并将任务执行情况数据进行编码 最后送往显示可视化进程监视终端显示 ;
所述线程控制模块用于实时对工作线程池中的多线程进行监视, 其包括容量调节 单元, 线程监视单元以及线程干预单元 ; 所述容量调节单元对系统性能进行监测并根据监 测结果调节线程池中工作线程数量 ; 所述线程监视单元用于对工作线程池中工作线程进行 监视, 将长时间空闲和长时间中断的线程进行记录并以日志形式进行保存 ; 所述线程干预 单元用于对线程监视单元所记录的异常线程进行释放和重新分配。
本发明建立了分布式任务执行信息采集技术, 对物理分散的各个任务执行终端进
行任务状态收集 ; 建立基于多线程的任务调度策略, 根据执行任务的优先等级、 监视节点的 关键程度对执行线程进行合理的分配, 实现多任务高效并行处理 ; 建立多线程自适应调节 技术, 对分配线程进行动态管理, 并根据系统的处理能力自适应的调整线程数量使系统运 行效率达到最优值。
本发明通过格式化的 XML 文件和任务执行终端进行数据交互完成任务执行情况 的自动采集, 并将采集到的结果通过网络汇总到任务汇集服务器, 进行数据的汇总检验, 过 滤掉冗余和异常数据, 最后将过滤后的任务执行情况入库保存。
本发明系统运行过程中实时对工作线程池中的多线程进行监视, 并根据当前系统 负载状态通过调节工作线程池中线程数量, 使系统效能达到最优的负载平衡, 同时对工作 异常的线程进行回收。
有益效果 : 本发明与现有技术相比, 其显著优点 : (1) 通过分布式任务执行信息采 集技术, 可以可靠而有效的对物理分散的各个任务执行终端进行任务状态收集, 并利用成 熟的数据库技术对历史采集数据进行有效的管理。(2) 利用多线程技术对多任务流程的管 理和监视进行计算资源的合理分配, 实现多任务高效的并行处理。 (3) 建立多线程任务调度 策略, 根据执行任务的优先等级、 监视节点的关键程度对执行线程进行合理的分配。(4) 通 过多线程自适应调节技术, 对分配线程进行动态管理, 并根据系统的处理能力自适应的调 整线程数量使系统运行效率达到最优值。 附图说明 下面结合附图和具体实施方式对本发明做更进一步的具体说明, 本发明的上述和 / 或其他方面的优点将会变得更加清楚。
图 1 是多任务进程监视方法的流程图。
图 2 是分布式任务执行情况数据采集的示意图。
图 3 是多线程任务调度中心体系结构框图。
图 4 是线程索引表结构图。
具体实施方式
如图 1 所示本发明分布式系统环境下的多任务进程监视方法, 步骤如下 :
第一步、 由于在分布式执行环境下各任务执行阶段被物理分散在各任务执行终 端, 如图 2 所示, 本发明利用现有进程监视技术对各任务执行终端的任务执行进程的五种 状态 ( 就绪、 等待、 挂起、 创建、 消失 ) 进行监视从而确定该任务执行阶段的具体执行情况, 根据任务执行进程的状态将各任务执行阶段的任务执行情况与之相应的定义为五类 : 就绪 →任务准备、 等待→任务等待、 挂起→任务中断、 创建→任务执行、 消失→任务结束。 最后将 进程监视获取到的任务执行情况通过格式化的 XML 描述文件进行保存并完成任务执行情 况的自动采集。其中约定任务执行阶段的关键程度和任务优先级由低到高为 1 ~ 9 级 ;
第二步、 将采集到的 XML 描述文件通过网络传输到任务汇集处理服务器进行数据 的解析和检验, 过滤掉冗余和异常数据, 最后将过滤后的任务数据写入数据库, 同时发送任 务变更消息通知任务调度中心 ;
第三步、 任务调度中心收到任务变更消息后直接提交到多线程任务调度模块, 多线程任务调度模块将收到的消息加入消息等待队列, 调度控制单元对消息等待队列进行实 时扫描在发现消息后按照先进先出的原则进行响应 ;
第四步、 调度控制单元响应到任务变化消息后, 根据线程索引表中的内容确定送 往的工作线程, 线程索引表构成如图 4 所示各线程信息和各线程对应的消息等待队列以二 维链表的形式保存。通过对线程索引表的遍历确定是否存在空闲线程, 如果工作线程池中 全部线程已被占用则根据任务等级采用高优先级先执行的策略进行调度, 调度控制单元工 作详细步骤如下 :
步骤 1、 根据接收到的任务变更消息解析出该任务的任务标识, 根据任务标识遍历 线程索引链表获取该任务与之对应的工作线程, 转到步骤 5。 如果未查询到该任务的工作线 程, 转到步骤 2。
步骤 2、 遍历线程索引表, 通过对线程索引表中各任务标识进行纵向遍历从而获取 未分配任务的空闲线程, 转到步骤 5。如果仍未有空闲的工作线程, 转到步骤 3。
步骤 3、 将该消息加入调度控制单元中的消息等待队列, 并按照任务等级进行排 序, 任务等级计算公式如下 :
, 其中 : R 表示任务优先级, 取值范围 1 ~ 9 ; J 表示任务执行阶段的关键程度, 取值范围 1 ~ 9 ; , 表示任务优先级和任务执行阶段的关键程度各自权值 ;p 表示计算出的任务等级 ;
步骤 4、 调度控制单元实时扫描等待队列, 并将消息依次送往步骤 2 执行。
步骤 5、 根据分配到的工作线程标识和任务变更消息中的任务标识编辑该任务的 执行消息并发送至工作线程池执行, 任务调度结束。
工作线程池接收到调度控制单元送来的任务执行消息后, 经解析获取为该任务分 配的执行线程标识, 通过线程索引表完成任务的引导, 最终完成任务的执行, 线程池工作详 细步骤如下 :
步骤 1、 创建工作线程池, 根据预设的线程池容量创建相应数量的工作线程, 同时 为每个工作线程开辟与之对应的消息队列, 线程运行过程中实时扫描该消息队列获取相关 任务参数完成数据计算以及数据显示等操作。
步骤 2、 创建线程索引表, 如错误!未找到引用源。 所示, 线程索引表以链表形式将 任务标识、 线程标识和线程消息队列的对应关系进行保存, 遍历工作线程池将各工作线程 标识和相对应的消息队列加入线程索引表中, 链表长度根据线程池容量进行设置。
步骤 3、 工作线程池将调度控制单元送来的任务执行消息经解析获取要送往执行 的线程标识, 根据线程标识获取线程索引链表中该节点地址。
步骤 4、 根据获取的节点地址, 将任务执行消息送往该链表节点所指向的消息队列 等待线程执行, 同时修改该链表节点的任务标识。
步骤 5、 当线程消息队列中所有消息执行完成后, 将该节点中任务标识清空恢复初 始状态, 任务执行结束。
第五步、 系统运行时线程控制模块负责对工作线程进行管理, 线程监视单元实时 对工作线程进行监控当发现异常线程时通知线程干预模块终止该线程, 同时将线程消息响应队列中未执行的任务消息发还任务调度模块进行线程的重新分配, 容量调节单元对系统 性能进行监测并根据监测结果调节线程池中工作线程数量, 详细步骤如下 :
步骤 1、 计算某个时间段 CPU 工作时间计算 CPU 使用率 :
对于单核 CPU 计算公式为 : (T-I)/T*100%, 其中, T 表示某个时间段, I 表示在这 个时间段中 CPU 处于空闲状态的时间 ;
对于多核 CPU 计算公式为 : (T*N-I)/T*N*100%, 其中, T 表示某个时间段, I 表示 在这个时间段中全部 CPU 核心的总空闲时间的和, N 表示 CPU 到核心数量 ;
容量调节单元实时对 CPU 使用率进行监测, 如果监测某一时间段 CPU 使用率一直 大于 50%则认为系统负载过重需减小线程池容量执行步骤 3 ; 如果监测某一时间段 CPU 使 用率一直小于 30%则认为系统负载过轻需增加线程池容量提升系统处理能力执行步骤 2 ; CPU 使用率保持在 30%~ 50%之间则认为系统工作比较稳定对线程池容量不进行操作。
步骤 2、 增加线程池容量, 创建工作线程以及对应的线程响应队列同时根据线程标 识在线程索引表中增加响应节点 ;
步骤 3、 减少线程池容量, 释放线程池中空闲线程并将线程索引表中该线程所在节 点删除。 本实施例所述的多任务进程监视系统, 包括多个分布式任务执行终端、 任务汇集 处理服务器以及任务调度中心 ;
如图 2 所示分布式任务执行情况数据采集模型组成如下 :
所述分布式任务执行终端与任务汇集处理服务器之间通过 XML 格式描述文件传 输任务执行情况 ;
所述任务执行情况采集过程对各任务执行终端中任务执行进程状态进行收集, 并 通过格式化的 XML 描述文件进行保存 ;
所述数据传输层用于将 XML 格式描述文件通过网络传输到任务汇集处理服务器 ;
所述任务汇集处理服务器用于接收 XML 格式描述文件, 并进行解析过滤掉冗余和 异常数据, 最后将过滤后的任务执行情况写入数据库 ;
如图 3 所示多线程任务调度中心体系结构组成如下 :
所述任务调度中心包括任务调度模块、 工作线程池以及线程控制模块 ;
所述任务调度模块用于接收所述任务汇集处理服务器传来的任务变更消息, 其包 括任务控制单元和消息等待缓冲区 ; 所述消息等待缓冲区用于存放消息 ; 所述任务控制单 元用于扫描消息并做出响应 ;
所述工作线程池用于处理任务, 其包括线程索引表, 线程控制单元、 任务控制单元 以及任务执行单元 ; 所述线程索引表包括任务标识、 线程标识、 下级节点地址以及线程消息 队列 ; 所述线程控制单元用于对各工作线程的创建和释放 ; 所述任务控制单元用于对线程 索引表中各线程所对应的线程消息队列进行扫描并将获取的消息送往任务执行单元执行 ; 所述任务执行单元用于对送达的任务变更消息进行响应并将任务执行情况数据进行编码 最后送往显示可视化进程监视终端显示 ;
所述线程控制模块用于实时对工作线程池中的多线程进行监视, 其包括容量调节 单元, 线程监视单元以及线程干预单元 ; 所述容量调节单元对系统性能进行监测并根据监 测结果调节线程池中工作线程数量 ; 所述线程监视单元用于对工作线程池中工作线程进行
监视, 将长时间空闲和长时间中断的线程进行记录并以日志形式进行保存 ; 所述线程干预 单元用于对线程监视单元所记录的异常线程进行释放和重新分配。
如图 4 所示线程索引表结构组成如下 :
所述线程索引表包括任务标识、 线程标识、 下级节点地址以及线程消息队列 ;
所述任务标识用于保存送往线程池执行的任务唯一标识 ; 所述线程标识用于保存 执行相应任务的线程标识, 该标识于任务标识相互对应 ; 所述线程消息队列用于保存对应 任务标识的执行消息, 线程运行过程中遍历该消息队列并根据获取到到任务执行消息进行 相应操作 ; 所述下级节点地址在执行链表遍历操作时可获取下级数据保存地址, 如获取到 下级节点地址为空则表明该节点已经是链表底部。
本实施例通过对分布式终端各任务状态的收集, 经多线程任务调度策略对计算资 源进行合理的分配, 从而实现多任务进程监视的快速响应。
本发明提供了一种分布式系统环境下的多任务进程监视方法和监视系统的思路, 具体实现该技术方案的方法和途径很多, 以上所述仅是本发明的优选实施方式, 应当指出, 对于本技术领域的普通技术人员来说, 在不脱离本发明原理的前提下, 还可以做出若干改 进和润饰, 这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分 均可用现有技术加以实现。