一种基于消息队列的应用软件响应时间测量方法

文档序号:6584644阅读:189来源:国知局
专利名称:一种基于消息队列的应用软件响应时间测量方法
技术领域
本发明涉及测量或测试过程控制的软件技术领域,特别涉及一种一种基于消息队 列的应用软件响应时间测量方法。
背景技术
随着软件技术逐渐融入各行各业、工作生活中,除了功能方面的需求,人们也对软 件系统的性能、可靠性等方面的要求也越来越高,会越发关心类似以下问题 这些“事务”成功了吗? 是什么原因导致某个“事务”失败了? 客户体验到的系统响应时间是多少? 在整个交易过程中哪个部分耗时最长? 系统瓶颈在哪里? 如何能提高应用系统的性能?目前,没有一种如何测量上述问题的好方法和系统。另一方面,缺乏从业务角度对业务路径、业务响应时间等业务纬度的监控,因此无 法从全局了解系统运行情况,而一旦业务异常,维护人员往往是通过主机、数据库、中间件 或其它途径得到消息,较为被动。

发明内容
(一)发明目的本发明的目的是提供一种基于消息队列的应用软件响应时间测量方法,以帮助维 护人员更加全面分析应用运行情况;监控业务系统错综复杂的相互调用关系,即业务路径; 了解业务响应时间异常原因;及时发现关键处理环节的潜在问题;快速定位异常情况的故 障点,从而完善集中监控体系。同时也能够为开发人员在开发测试过程中提供故障分析的 方法。
发明内容
一种基于消息队列的应用软件响应时间测量方法,其特征在于,包括以下步骤S1 应用软件调用函数的同时调用ARM(Application ResponseMeasurement,应用 软件响应时间测量)应用接口库,所述ARM应用接口库向消息队列发送消息,包括开始消息 和结束消息;S2:读取消息队列中的消息,通过开始消息和结束消息计算所述应用软件调用函 数的响应时间;S3 保存所述函数调用关系,统计响应时间,将统计结果存储入数据库;S4 保存所述函数调用关系,显示统计结果和函数调用关系图。其中,所述步骤S1包括应用软件调用函数的同时调用ARM的开始事务接口,以应用软件调用函数的函数名和其父函数名为参数,开始事务接口产生全局唯一标识符GUID,记录当前系统时间,即函 数执行开始时间,并将所述函数名、父函数名、GUID和函数执行开始时间组成开始消息发送 到消息队列中;应用软件执行调用函数原来的代码;应用软件执行完调用函数原来的代码后,调用ARM的结束事务接口,以应用软件 调用函数的函数名和GUID作为参数,记录当前系统时间,即函数执行结束时间,并将所述 函数名、⑶ID和函数执行结束时间组成结束消息发送到消息队列中。其中,所述步骤S2包括采用阻塞式读取消息队列中的消息;判断所述消息是开始消息或是结束消息,若是开始消息,则将该消息存储在数据 缓存中,若是结束消息,则找到对应的开始消息并计算应用软件调用函数的响应时间;采样过滤所述响应时间,生成包含函数名、父函数名、⑶ID、函数执行开始时间和 函数响应时间的数据,同时删除所述开始消息;其中,所述步骤S3包括接收包含函数名、父函数名、GUID、函数执行开始时间和函数响应时间的数据,并 存储在缓存中,同时保存函数调用关系;每单位时间统计一次应用程序调用函数的次数、平均响应时间、最大响应时间和 最小响应时间,将统计结果存储入数据库;根据最大响应时间和最小响应时间动态配置应用软件调用函数的响应时间告警 阈值。其中,所述步骤S4包括显示应用软件调用函数的统计信息,包括函数名、在单位时间内的调用次数和在 单位时间内的平均响应时间;标识所述平均响应时间超出阈值的函数;显示函数之间的调用关系图。其中,所述方法还包括步骤计算应用软件调用函数的平均响应时间;判断所述平均响应时间是否超出所述阈值,若超出阈值,则产生“严重告警”;将所述“严重告警”发送到消息队列中;应用软件再次调用函数时,调用ARM的开始事务接口,所述接口首先读取消息队 列,如有“严重告警”则终止应用软件。一种基于消息队列的应用软件响应时间测量系统,包括ARM应用接口库模块,用于应用软件调用函数的同时调用ARM应用接口库,所述 ARM应用接口库向消息队列发送消息,包括开始消息和结束消息;数据采集代理程序模块,用于数据采集代理程序读取消息队列中的消息,通过开 始消息和结束消息计算应用软件调用函数的响应时间;数据处理服模块,用于保存所述函数调用关系,统计响应时间,将统计结果存储入 数据库;数据展示模块,用于保存所述函数调用关系,显示统计结果和函数调用关系图。
其中,所述ARM应用接口库模块包括调用开始事务接口模块,用于应用软件调用函数的同时调用ARM的开始事务接 口,以应用软件调用函数的函数名和其父函数名为参数,开始事务接口产生全局唯一标识 符GUID,记录当前系统时间,即函数执行开始时间,并将所述函数名、父函数名、GUID和函 数执行开始时间组成开始消息发送到消息队列中;原函数调用模块,用于应用软件执行调用函数原来的代码;调用结束事务接口模块,用于应用软件执行完调用函数原来的代码后,调用ARM 的结束事务接口,以应用软件调用函数的函数名和GUID作为参数,记录当前系统时间,即 函数执行结束时间,并将所述函数名、GUID和函数执行结束时间组成结束消息发送到消息 队列中。其中,所述数据采集代理程序模块包括读取消息模块,用于数据采集代理程序采用阻塞式读取消息队列中的消息;计算响应时间模块,用于判断所述消息是开始消息或是结束消息,若是开始消息, 则将该消息存储在数据缓存中,若是结束消息,则找到对应的开始消息并计算应用软件调 用函数的响应时间;采样过滤模块,用于过滤所述响应时间,生成包含函数名、父函数名、⑶ID、函数执 行开始时间和函数响应时间的数据,同时删除所述开始消息;其中,所述数据处理模块包括接收数据模块,用于接收包含函数名、父函数名、GUID、函数执行开始时间和函数 响应时间的数据,并存储在缓存中,同时保存函数调用关系;统计模块,用于每单位时间统计一次应用程序调用函数的次数、平均响应时间、最 大响应时间和最小响应时间,将统计结果存储入数据库;设置阈值模块,用于根据最大响应时间和最小响应时间动态配置应用软件调用函 数的响应时间告警阈值。(三)有益效果本发明的基于消息队列的应用软件响应时间测量系统从全局高度,以应用软件的 业务逻辑为线索,反映沿途各关键业务环节的性能数据,并且通过分析其异像,发现潜在的 性能瓶颈、故障,及时通报相关维护人员处理的业务维度监控能力;对于开发人员,能对特 定单笔或者所有业务的业务路径进行跟踪,以便更好地理解业务的执行过程和各过程中的 处理时间,处理结果等监控指标。并可通过超时、延时的性能数据分析,失败的告警数据分 析,达到功能测试、性能测试的目的。


图1是根据本发明的基于消息队列的应用软件响应时间测量方法的流程图;图2是根据本发明的基于消息队列的应用软件响应时间测量方法的应用程序调 用ARM应用接口库的流程图;图3是根据本发明的基于消息队列的应用软件响应时间测量方法的数据采集代 理程序流程图;图4是根据本发明的基于消息队列的应用软件响应时间测量方法的数据处理模块处理流程图;图5是根据本发明的基于消息队列的应用软件响应时间测量方法的数据处理模块计算阈值时的动态基线图;图6是根据本发明的基于消息队列的应用软件响应时间测量方法的数据展示模 块的显示结果;图7是数据展示模块将父子函数调用关系表转换成函数调用关系图;图8是根据本发明的基于消息队列的应用软件响应时间测量方法的数据处理模 块反向控制应用程序流程图;图9是根据本发明的基于消息队列的应用软件响应时间测量系统结构图。
具体实施例方式本发明提出的基于消息队列的应用软件响应时间测量方法,结合附图和实施例说 明如下。如图1所示,Sl 应用软件调用函数的同时调用ARM应用接口库,ARM应用接口库 向消息队列发送消息,包括开始消息和结束消息。ARM应用接口库中提供两个主要的函数 开始事务接口 arm_start_transaction()和结束事务接口 arm_stop_transaction (),应用 软件调用ARM应用接口库的具体流程如图2所示,步骤SlOl中,应用软件在调用某个函数 时,调用arm_start_transacti0n()接口函数,把应用软件调用的函数的函数名和其父函 数名作为输入参数,调用arm_start_transacti0n()接口函数后,会产生一个全局唯一标 识符(Global Unique Identifier,⑶ID),ARM应用接口库会纪录此时的系统时间,同时将 父函数名、函数名、⑶ID和系统时间组成一个消息,并将此“开始消息”发送到消息队列中。 如没有父函数调用,则将输入参数“父函数名”置为空(null);步骤S102应用软件继续执 行所调用函数原来的代码;步骤S103中,应用软件调用arm_st0p_transacti0n()接口函 数,把应用软件调用函数的函数名和调用arm_start_transacti0n()函数产生的全局唯一 标识符⑶ID作为输入参数,ARM应用接口库会纪录此时的系统时间,同时将⑶ID和系统时 间组成另一个消息,并将此“结束消息”发送到消息队列中。S2:读取消息队列中的消息,通过开始消息和结束消息计算应用软件调用函数的 响应时间,将并包含响应时间的数据发送给数据处理模块。具体步骤如图3所示,步骤S201 中,消息队列读取线程采用阻塞式读取消息队列中的消息,一旦有消息进入消息队列,消息 队列读取线程立刻读取到一条消息;步骤S202中,消息队列读取线程首先判断此消息的类 型,如果是“开始消息”,则将此消息存储在数据缓存中;如果是“结束消息”,则通过消息中 的GUID在数据缓存中寻找相对应的“开始消息”,将“结束消息”中的系统时间减去“开始消 息”中的系统时间,计算得到应用程序调用这个函数的响应时间;步骤S203中,将这个响应 时间发送给采样过滤器,采样过滤器的目的是减少发送给数据处理模块的网络传输量,采 样率可以配置修改,使用的算法有固定采样和随机采样,采样过滤后生成包括⑶ID、父函数 名、函数名、函数开始执行时间、函数响应时间的数据,然后删除数据缓存中存储的相应的 “开始消息”。S3 保存函数调用关系,统计响应时间,将统计结果存储入数据库。如图4所示,步 骤S301中,接收每一次应用程序调用某个函数的包含函数名、父函数名、GUID、函数执行开始时间和函数响应时间的数据,并存入缓存中,同时保存函数调用关系;步骤S302中,每单位时间统计一次应用程序调用的次数、平均响应时间、最大响应时间和最小响应时间等值; 步骤S303中,利用动态基线计算方法,可以自动配置应用程序调用某个函数的响应时间告 警阈值,根据不同时段设定合理变化区域的方法被称为基于历史统计数据的“动态基线算 法(dynamic baseline algorithm) ”。如图5所示,上基线表示各个时段正常值最大值连成 的曲线,下基线表示各个时段正常值的最小值连成的曲线,二者确定了各个时段的正常波 动范围,体现了正常情况下该性能指标在24小时之内的变化趋势,以天为单位,在计算某 个时间点的数据的时候,取历史范围内的同一个时间点进行参照,预测出一个正常的运行 范围。使用概率分布算法(1)首先对预处理后的有效数据进行排序,假定共有N*个,分别记为Xl XN* ;(2)假定有效数据的¥% (在实践中可以根据省公司、业务系统、管理要求等因 素设定,建议取95%)为可以接受而不用产生告警的指标值,滑动排序数据的窗口(共 N*XY%个数据),计算该窗口中数据的均方差,1)计算该窗口中样本的平均值作为期望值E (X);2)计算窗口各个样本点对于数学期望的偏离程度,单个偏离是X-E (X)。为消除符 号影响,一般取(X-E(X))2;3)求方差,即窗口中所有样本点偏离平方的均值,记为D(X),4)求标准差或均方差V^,描述了改组样本的波动程度;(3)取均方差最小的窗口中的数据,以其最大值作为基线上限,以其最小值作为基 线的下限。动态基线计算方法计算出的上下容忍线(基线上下限增加10% ),S卩,响应时间告 警阈值,对比这一时间单位内的应用程序调用某个函数的响应时间,如超出则产生告警。S4:保存所述函数调用关系,显示统计结果和函数调用关系图。如图6所示,601、 602,603,604分别代表四个函数,函数之间的箭头从左向右代表调用关系。函数601调用 函数602,函数602调用函数603 ;然后,函数601调用函数604。每个函数内部显示三项内 容函数名,单位时间内被调用的次数,即执行次数,单位时间内的平均响应时间。显示结果 中还有一项表示内容每个函数(601、602、603或604)的背景颜色代表其状态。如背景颜 色为绿色表示正常;背景颜色为红色,表示此函数当前单位时间内的平均响应时间超过动 态基线的上下容忍线,函数601、602和603均正常,函数604异常。如图7所示,将父子函数调用关系表转换成函数调用关系图,接收每一次应用程 序调用某个函数的响应时间数据(传输内容包括GUID、父函数名、函数名、函数开始执 行时间、函数响应时间),存入缓存中的同时,将父子函数关系保存在“父子函数调用关系 表”701中。如“父子函数调用关系表”701有变化,则将变化传输给数据展示模块。数据展 示模块也保存一份“父子函数调用关系表”701。在进行界面展示时,通过遍历“父子函数调 用关系表” 701的办法,转换成“函数调用关系图” 702。本方法可以反向控制应用程序的流程,如图8所示,通过动态基线计算方法计算 得到应用程序调用某个函数的响应时间超出阈值,产生一条“严重告警”。并将此条告警发送到消息队列中。当应用程序再次调用某函数,调用ARM应用接口库中提供的函数arm_ start_transaction()时,ARM应用接口库首先读消息队列,如有严重告警消息,则调用系 统函数exit (),从而终止应用程序进程。本发明还提供了一种基于消息队列的应用软件响应时间测量系统,如图9所示, 包括ARM应用接口库模块,用于应用软件调用函数的同时调用ARM应用接口库,所述 ARM应用接口库向消息队列发送消息,包括开始消息和结束消息;
数据采集代理程序模块,用于数据采集代理程序读取消息队列中的消息,通过开 始消息和结束消息计算应用软件调用函数的响应时间,将并包含响应时间的数据发送给数 据处理模块;数据处理模块,用于保存所述函数调用关系,统计响应时间,将统计结果存储入数 据库,同时将函数调用关系的变化和统计结果发送给数据展示模块;数据展示模块,用于保存所述函数调用关系,显示统计结果和函数调用关系图。应用软件、消息队列和数据采集代理程序部署在同一个应用服务器上。应用软件 源代码中嵌入ARM应用接口库,在应用软件调用ARM应用接口库时,便通过ARM应用接口库 向消息队列发送了一条消息;数据采集代理程序模块接收到这条消息后,存储在其内部缓 存中,并通过TCP线程池发送给数据处理模块。数据处理模块将一段时间内的数据统计后, 通过TCP发送给数据展示模块。数据展示模块负责将统计后的数据呈现给最终用户。其中,消息队列还有其他的数据传输方式,如文件、管道、共享内存等。但消息队列 传输方式即安全又快速。其中,所述ARM应用接口库模块包括调用开始事务接口模块,用于应用软件调用 函数的同时调用ARM的开始事务接口 arm_start_transacti0n(),以应用软件调用函数的 函数名和其父函数名为参数,开始事务接口产生全局唯一标识符GUID,记录当前系统时间, 即函数执行开始时间,并将所述函数名、父函数名、GUID和函数执行开始时间组成开始消 息发送到消息队列中;原函数调用模块,用于应用软件执行调用函数原来的代码;调用结 束事务接口模块,用于应用软件执行完调用函数原来的代码后,调用ARM的结束事务接口 arm_stop_transaction(),以应用软件调用函数的函数名和⑶ID作为参数,记录当前系统 时间,即函数执行结束时间,并将所述函数名、GUID和函数执行结束时间组成结束消息发送 到消息队列中。其中,所述数据采集代理程序模块包括读取消息模块,用于数据采集代理程序采 用阻塞式读取消息队列中的消息;计算响应时间模块,用于判断所述消息是开始消息或是 结束消息,若是开始消息,则将该消息存储在数据缓存中,若是结束消息,则找到对应的开 始消息并计算应用软件调用函数的响应时间;采样过滤模块,用于过滤所述响应时间,生成 包含函数名、父函数名、GUID、函数执行开始时间和函数响应时间的数据,同时删除所述开 始消息。将采样过滤后生成的数据发送给数据处理模块。其中,所述数据处理模块包括接收数据模块,用于接收包含函数名、父函数名、 GUID、函数执行开始时间和函数响应时间的数据,并存储在缓存中,同时保存函数调用关 系;统计模块,用于每单位时间统计一次应用程序调用函数的次数、平均响应时间、最大响 应时间和最小响应时间,将统计结果存储入数据库;设置阈值模块,用于根据最大响应时间和最小响应时间动态配置应用软件调用函数的响应时间告警阈值。数据处理完成后将函数 调用关系的变化、统计结果和超出阈值的告警发送给数据展示模块以供其显示。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通 技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有 等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
一种基于消息队列的应用软件响应时间测量方法,其特征在于,包括以下步骤S1应用软件调用函数的同时调用ARM应用接口库,所述ARM应用接口库向消息队列发送消息,包括开始消息和结束消息;S2读取消息队列中的消息,通过开始消息和结束消息计算所述应用软件调用函数的响应时间;S3保存所述函数调用关系,统计响应时间,将统计结果存储入数据库;S4保存所述函数调用关系,显示统计结果和函数调用关系图。
2.如权利要求1所述的基于消息队列的应用软件响应时间测量方法,其特征在于,所 述步骤S1包括应用软件调用函数的同时调用ARM的开始事务接口,以应用软件调用函数的函数名和 其父函数名为参数,开始事务接口产生全局唯一标识符GUID,记录当前系统时间,即函数执 行开始时间,并将所述函数名、父函数名、GUID和函数执行开始时间组成开始消息发送到消 息队列中;应用软件执行调用函数原来的代码;应用软件执行完调用函数原来的代码后,调用ARM的结束事务接口,以应用软件调用 函数的函数名和GUID作为参数,记录当前系统时间,即函数执行结束时间,并将所述函数 名、⑶ID和函数执行结束时间组成结束消息发送到消息队列中。
3.如权利要求1所述的基于消息队列的应用软件响应时间测量方法,其特征在于,所 述步骤S2包括采用阻塞式读取消息队列中的消息;判断所述消息是开始消息或是结束消息,若是开始消息,则将该消息存储在数据缓存 中,若是结束消息,则找到对应的开始消息并计算应用软件调用函数的响应时间;采样过滤所述响应时间,生成包含函数名、父函数名、GUID、函数执行开始时间和函数 响应时间的数据,同时删除所述开始消息。
4.如权利要求1所述的基于消息队列的应用软件响应时间测量方法,其特征在于,所 述步骤S3包括接收包含函数名、父函数名、GUID、函数执行开始时间和函数响应时间的数据,并存储 在缓存中,同时保存函数调用关系;每单位时间统计一次应用程序调用函数的次数、平均响应时间、最大响应时间和最小 响应时间,将统计结果存储入数据库;根据最大响应时间和最小响应时间动态配置应用软件调用函数的响应时间告警阈值。
5.如权利要求1所述的基于消息队列的应用软件响应时间测量方法,其特征在于,所 述步骤S4包括显示应用软件调用函数的统计信息,包括函数名、在单位时间内的调用次数和在单位 时间内的平均响应时间;标识所述平均响应时间超出阈值的函数;显示函数之间的调用关系图。
6.如权利要求1-5任一所述的基于消息队列的应用软件响应时间测量方法,其特征在 于,所述方法还包括步骤计算应用软件调用函数的平均响应时间;判断所述平均响应时间是否超出所述阈值,若超出阈值,则产生“严重告警”; 将所述“严重告警”发送到消息队列中;应用软件再次调用函数时,调用ARM的开始事务接口,所述接口首先读取消息队列,如 有“严重告警”则终止应用软件。
7.一种基于消息队列的应用软件响应时间测量系统,其特征在于,包括ARM应用接口库模块,用于应用软件调用函数的同时调用ARM应用接口库,所述ARM应 用接口库向消息队列发送消息,包括开始消息和结束消息;数据采集代理程序模块,用于数据采集代理程序读取消息队列中的消息,通过开始消 息和结束消息计算应用软件调用函数的响应时间;数据处理服模块,用于保存所述函数调用关系,统计响应时间,将统计结果存储入数据库;数据展示模块,用于保存所述函数调用关系,显示统计结果和函数调用关系图。
8.如权利要求7所述的基于消息队列的应用软件响应时间测量系统,其特征在于,所 述ARM应用接口库模块包括调用开始事务接口模块,用于应用软件调用函数的同时调用ARM的开始事务接口, 以应用软件调用函数的函数名和其父函数名为参数,开始事务接口产生全局唯一标识符 GUID,记录当前系统时间,即函数执行开始时间,并将所述函数名、父函数名、GUID和函数执 行开始时间组成开始消息发送到消息队列中;原函数调用模块,用于应用软件执行调用函数原来的代码;调用结束事务接口模块,用于应用软件执行完调用函数原来的代码后,调用ARM的结 束事务接口,以应用软件调用函数的函数名和GUID作为参数,记录当前系统时间,即函数 执行结束时间,并将所述函数名、GUID和函数执行结束时间组成结束消息发送到消息队列 中。
9.如权利要求7所述的基于消息队列的应用软件响应时间测量系统,其特征在于,所 述数据采集代理程序模块包括读取消息模块,用于数据采集代理程序采用阻塞式读取消息队列中的消息; 计算响应时间模块,用于判断所述消息是开始消息或是结束消息,若是开始消息,则将 该消息存储在数据缓存中,若是结束消息,则找到对应的开始消息并计算应用软件调用函 数的响应时间;采样过滤模块,用于过滤所述响应时间,生成包含函数名、父函数名、⑶ID、函数执行开 始时间和函数响应时间的数据,同时删除所述开始消息。
10.如权利要求7所述的基于消息队列的应用软件响应时间测量系统,其特征在于,所 述数据处理模块包括接收数据模块,用于接收包含函数名、父函数名、GUID、函数执行开始时间和函数响应 时间的数据,并存储在缓存中,同时保存函数调用关系;统计模块,用于每单位时间统计一次应用程序调用函数的次数、平均响应时间、最大响 应时间和最小响应时间,将统计结果存储入数据库;设置阈值模块,用于根据最大响应时间和最小响应时间动态配置应用软件调用函数的响应时间告警阈值。
全文摘要
本发明公开了一种基于消息队列的应用软件响应时间测量方法,包括步骤应用软件调用函数的同时调用ARM应用接口库,ARM应用接口库向消息队列发送消息;读取消息队列中的消息,计算应用软件调用函数的响应时间;保存函数调用关系,统计响应时间,将统计结果存储入数据库;显示统计结果和函数调用关系图。基于消息队列的应用软件响应时间测量系统,包括ARM应用接口库、数据采集代理程序模块、数据处理模块和数据展示模块。本发明能帮助维护人员更加全面分析应用运行情况;监控业务系统错综复杂的相互调用关系;了解业务响应时间异常原因等,从而完善集中监控体系。同时也能够为开发人员在开发测试过程中提供故障分析的工具。
文档编号G06F11/36GK101876938SQ200910237529
公开日2010年11月3日 申请日期2009年11月11日 优先权日2009年11月11日
发明者张英亮, 徐海军, 赵永明 申请人:北京神州泰岳软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1