会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑零配件 / 固件 / 软件 / 基于OSGi的软件构件监测方法与系统

基于OSGi的软件构件监测方法与系统

阅读:304发布:2021-03-02

IPRDB可以提供基于OSGi的软件构件监测方法与系统专利检索,专利查询,专利分析的服务。并且本发明公开了一种基于OSGi的软件构件监测方法与系统,属于软件构件化技术领域。本发明基于以下方案:a)OSGi平台启动时,一监测点注入器为所述OSGi平台注入代码,该代码使得所述OSGi平台在软件构件的解析阶段完成后发布所述软件构件可供其他软件构件调用的接口;b)软件构件部署在OSGi平台时,监测点注入器对软件构件中被加载的类中的公共方法进行操作,将公共方法调用的入口和出口位置作为监测点,注入监测代码以标识公共方法调用的开始与结束;c)根据所述监测点确定线程在其各个阶段对应的软件构件;d)统计每个构件的资源占用情况。本发明可用于软件分析等领域。,下面是基于OSGi的软件构件监测方法与系统专利的具体信息内容。

1.一种基于OSGi的软件构件监测方法,所述方法包括:

a)OSGi平台启动时,一监测点注入器为所述OSGi平台注入代码,该代码使得所述OSGi平台在软件构件的解析阶段完成后发布所述软件构件可供其他软件构件调用的接口;

b)所述软件构件部署在所述OSGi平台时,所述监测点注入器对所述软件构件中被加载的类中的公共方法进行操作,将所述公共方法调用的入口和出口位置作为监测点,注入监测代码以标识所述公共方法调用的开始与结束;

c)根据所述监测点确定线程在其各个阶段对应的软件构件;

d)统计每个构件的资源占用情况。

2.如权利要求1所述的基于OSGi的软件构件监测方法,其特征在于,所述公共方法包括构造方法和成员方法。

3.如权利要求1所述的基于OSGi的软件构件监测方法,其特征在于,所述资源包括CPU资源和内存资源。

4.如权利要求3所述的基于OSGi的软件构件监测方法,其特征在于,每个构件的CPU资源的占用情况按下列方法统计:以各个线程在所述软件构件中执行时所占用的CPU时间的总和作为所述软件构件所占用的CPU资源。

5.如权利要求3所述的基于OSGi的软件构件监测方法,其特征在于,每个构件的内存资源的占用情况按下列方法统计:按照创建对象的软件构件的标识将对象进行分组,以各组中对象占用的内存空间的总和作为所述软件构件所占用的内存资源。

6.一种基于OSGi的软件构件监测系统,所述系统包括:监测点注入器,Java虚拟机监测器,中央桥接器,和管理控制台;所述中央桥接器分别和OSGi平台、软件构件、Java虚拟机监测器、监测点注入器及管理控制台数据连接;所述监测点注入器分别和所述OSGi平台及软件构件数据连接;所述Java虚拟机监测器和Java虚拟机数据连接;

所述监测点注入器用于:对所述OSGi平台进行代码注入,使所述OSGi平台将软件构件对外提供的接口信息汇报给所述监测系统;同时将公共方法的进入和退出位置作为监测点注入代码;

所述Java虚拟机监测器用于:标识线程的归属;标识对象的归属;和进行资源的统计;

所述中央桥接器用于连接Java虚拟机和软件构件,软件构件通过中央桥接器实现对Java虚拟机的操作;

所述管理控制台用于设置监测参数并获得监测信息。

说明书全文

基于OSGi的软件构件监测方法与系统

技术领域

[0001] 本发明涉及软件构件化技术领域,具体涉及一种基于OSGi的软件构件监测方法与系统。

背景技术

[0002] 软件构件是具有一定功能、可明确辨识的软件单位,其具有良好的封装,清晰的接口定义,明确的背景依赖,可以被独立配置与部署。通过采用软件构件技术,可以有效的提升软件开发质量,提高开发效率,使系统具有更高的可扩展性和可维护性。基于构件的软件工程已经成为一个主流的软件开发方法,并被广泛用来构建企业信息系统。
[0003] OSGi(Open Services Gateway initiative)是一种广泛应用的轻量级软件基础框架,为构件化软件的开发和运行提供了支撑环境。在OSGi中,服务通常被描述为一个Java接口,实现部分与相关的资源打包在一个软件构件中,其中,Manifest文件描述了软件构件信息。在这里,软件构件是一个物理上的JAR文件,能够在运行时动态的添加、删除和更新。每一个软件构件通过提供和调用服务接口的方式进行交互。OSGi提供了软件构件生命周期管理和动态依赖管理,同时,服务注册、服务发现和服务绑定机制的引入大大提高了软件的动态性。目前,大量项目,包括嵌入式设备、移动设备和应用服务器,都在推出以OSGi作为基础框架的新版本,如Eclipse 3.0,JonAS 5,BMW汽车控制应用系统等等,OSGi技术正在被更多的企业采用,应用在更为广泛的领域。
[0004] 但基于OSGi的软件构件是一个黑盒程序单元,其源代码对用户是透明的,并且缺乏必要的设计和使用文档,用户无法了解其资源占用和行为特征等属性,因此,如何评估软件构件是否符合系统开发的需要,整合起来的系统能否满足用户需求成为一个需要重点关注的问题。目前的软件构件分析大致从两个方面考虑:软件构件自身的资源使用情况统计和软件构件间的依赖与交互行为分析。
[0005] 软件构件间的依赖与交互行为分析工具,主要通过对源代码或编译后的类文件进行分析,获得方法或包之间的依赖关系。JDepend(http://www.clarkware.com/software/JDepend.html)遍历Java类文件目录,并且为每个Java包生成质量参数,同时,能够自动化的在可扩展性、可重用性和可维护性方面测量系统设计的质量以有效的管理包依赖关系;DependencyExtractor(http://depfind.sourceforge.net/tasks/dependencyextractor.html)用来计算包、类、方法以及属性间的依赖关系,结果以XML文档形式展现;
Ignominy(L.Tuura and L.Taylor,″Ignominy:a tool for software dependency and metric analysis with examples from large HEP packages,″in Computing in High Energy and nuclear Physics,Beijing,China,2001.)用来分析大规模软件系统中包之间的依赖关系,能够分析Fortran,C和C++代码依赖。但是OSGi是动态的面向服务的平台,在运行过程中,会有新的软件构件以服务注册的方式动态加入到系统,软件构件也会根据应用场景以服务调用的方式在运行中动态获取其他软件构件所提供的服务。当前的软件构件依赖分析工具通过静态的源代码分析无法得这些动态产生的依赖关系,并且不能实时获得运行中软件构件间调用情况。
[0006] 软件构件的资源使用分析工具,主要以JVM(Java virtual machine,Java虚拟机)或线程为单位进行监测和资源统计。如,JConsole(http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html)是基于JMX的监测工具,使用JMX统计运行在Java平台上应用的内存占用、线程使用和垃圾回收等信息;NetBeans Profiler(http://profiler.netbeans.org/集成到了NetBean集成开发环境,能够从线程和方法两个角度展示运行过程中Java程序的CPU和内存占用率等性能数据;Hulaas等(J.Hulaas and W.Binder,″Program transformations for portable CPU accounting and control in Java,″in Proceedings of the 2004 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation,Verona,Italy,2004.)采用字节码层的程序转换技术在标准JVM下对Java应用的CPU占用量进行计算和控制,该方法采用可移植的方式修改了应用、中间件和标准的Java运行时库。但在OSGi平台上,多个Java构件在同一个Java虚拟机上协同工作,JVM隐藏了独立的软件构件的资源使用情况,为以软件构件为单位的资源监测带来了挑战。Miettinen等(T.Miettinen,et al.,″AMethod for the Resource Monitoring of OSGi-based Software Components,″in Proceedings of the 34th Euromicro Conference Software Engineering and Advanced Applications,2008.)将执行线程划分为若干分组,当软件构件被部署时,创建一个以软件构件名命名的线程组对象,然后创建一个属于该线程组的线程,在此线程中执行软件构件的启动方法;当软件构件提供的服务被调用时,创建新的属于该服务提供者软件构件对应线程组的线程,在这个线程里完成服务调用。这样存在三点问题:第一,改变原有系统的执行流程;第二,只能统计动态服务调用,无法统计静态方法调用所占用的资源;第三,频繁的线程切换操作会造成过多的开销,因此,只能用于测试阶段而不适用于在线实时监测。

发明内容

[0007] 本发明的目的是克服现有技术中存在的问题,提出一种新的基于OSGi的软件构件监测方法与系统。
[0008] 针对现有技术在OSGi环境下无法在线实时获取软件构件的交互行为,以及资源监测开销大且不准确等问题,本发明提出一种基于OSGi的软件构件监测方法与系统,以软件构件为粒度,在线实时监测软件构件间的交互行为及CPU、内存等资源的占用情况,并具有不改变原有执行流程、开销较小等优点。
[0009] 本发明所述的监测方法包括:
[0010] a)OSGi平台启动时,一监测点注入器为所述OSGi平台注入代码,该代码使得所述OSGi平台在软件构件的解析阶段完成后发布该软件构件可供别的构件调用的接口;
[0011] b)所述软件构件部署在所述OSGi平台时,所述监测点注入器对所述软件构件中被加载的类中的公共方法进行操作,将所述公共方法调用的入口和出口位置作为监测点,注入监测代码以标识所述公共方法调用的开始与结束;
[0012] c)根据所述监测点确定线程在其各个阶段对应的软件构件;
[0013] d)统计每个构件的资源占用情况。
[0014] 通过本发明方法获得的每个构件的资源占用情况,系统管理人员可以根据资源占用是否正常来判断构件是否正常,从而进行可靠性分析和异常诊断。
[0015] 下面通过一非限制性具体实例更具体地描述本发明的方法。
[0016] 1.OSGi是软件构件运行的基础平台,用于管理软件构件的依赖调用和生命周期,并且记录软件构件的相关信息。当有新的软件构件加载时,OSGi会自动完成软件构件中Manifest元文件的解析工作,而元文件中记录了软件构件对外提供的可供调用的接口,即导出包。当OSGi平台进行类加载时,监测点注入器为其注入代码,使得OSGi在完成元文件解析后,主动将软件构件对其他软件构件所暴露的接口汇报给监测系统。从而,监测系统可以及时准确的获得OSGi平台上软件构件提供的调用接口等信息。
[0017] 2.当软件构件部署到OSGi平台时,OSGi完成对软件构件元文件的解析,汇报给监测系统。当此软件构件中的类被加载时,监测点注入器判断该类是否在元文件中声明所导出的包中,如果在则根据软件构件所在的类加载器为该类设置ID。并且,对类中的公共(Public)方法进行操作,包括构造方法和成员方法,将该方法调用的入口和出口位置作为监测点,注入监测代码以标识方法调用的开始与结束。
[0018] 3.线程是应用的执行单元,在OSGi中由于软件构件间服务与方法的调用,线程往往会在不同的软件构件间切换,线程与软件构件之间的关系在不断变化。因此,监测系统需要将每个线程的执行过程划分为若干阶段,各阶段隶属于不同的软件构件。
[0019] (1)对象创建时:由于OSGi环境下,每个软件构件都具有独立的类加载器,根据创建对象的线程所在的类以及类所属的加载器,得到创建对象的软件构件,而后,使用软件构件的ID标识所创建的对象,其中线程对象也作为对象的一种。
[0020] (2)线程在方法间转换时:当线程执行经过注入的监测点时,注入的监测代码与中央桥接器进行通信,通知其线程在调用的方法间进行了切换。中央桥接器依据从方法到类,从类到软件构件的映射关系,判定方法的切换是否造成了线程在软件构件间的切换。如判定未发生切换,则不进行任何处理;如发生切换,则将线程标识为其所进入的软件构件。
[0021] 4.统计每个构件的资源占用情况,所述资源包括CPU资源和内存资源。
[0022] (1)软件构件占用的CPU时间:由于线程的执行占用了CPU时间,计算各线程在软件构件中执行所占用的CPU时间总和就是软件构件占用的CPU时间。当通过步骤3判断得到线程在软件构件间切换时,则计算线程在上一个软件构件中的执行时间,然后进行累加。
[0023] (2)软件构件占用的内存:按照创建对象的软件构件的标识将对象进行分组,各组中对象占用空间的总和即是软件构件所占用的空间。
[0024] 本发明所述的监测系统包括(如图1所示):
[0025] 监测点注入器,Java虚拟机监测器,中央桥接器,和管理控制台;
[0026] 所述中央桥接器分别和所述OSGi平台、软件构件、Java虚拟机监测器、监测点注入器及管理控制台数据连接;所述监测点注入器分别和所述OSGi平台及构件数据连接;所述Java虚拟机监测器和所述Java虚拟机数据连接;
[0027] 所述监测点注入器用于:对OSGi平台进行代码注入,使OSGi将软件构件对外提供的接口信息汇报给所述监测系统;同时将公共方法的进入和退出位置作为监测点注入代码;
[0028] 所述Java虚拟机监测器用于:标识线程的归属;标识对象的归属;和进行资源的统计;
[0029] 所述中央桥接器用于连接Java虚拟机和软件构件,软件构件通过中央桥接器实现对Java虚拟机的操作;
[0030] 所述管理控制台用于设置监测参数并获得监测信息。
[0031] 下面通过一非限制性具体实例对本发明系统作具体描述。
[0032] 1.监测点注入器:
[0033] 监测点注入器主要用于OSGi平台和软件构件中监测点的注入,包括以下两个功能:
[0034] (1)OSGi注入。对OSGi进行代码注入,使得OSGi将软件构件对外提供的接口信息汇报给监测系统。
[0035] (2)软件构件注入。将方法的进入和退出位置作为监测点,注入代码以判断线程执行是否在软件构件间的转移。
[0036] 2.JVM监测器:
[0037] JVM监测器是系统的核心部分,用于线程的标识和线程占用资源的统计,主要实现以下三个功能:
[0038] (1)标识线程的归属:当线程创建和转移时,将标识线程标识为软件构件的ID。
[0039] (2)标识对象的归属:当对象创建时,查看当前线程所在软件构件的ID,并将该对象标识为此ID。
[0040] (3)资源的统计:线程转移时计算消耗的CPU资源,以及统计对象占用空间。
[0041] 3.中央桥接器
[0042] 中央桥接器在整个系统中起到桥梁作用,主要用于连接软件构件与JVM监测器。通过中央桥接器,软件构件可以方便地实现对JVM进行操作,其主要实现以下三个功能:
[0043] (1)维护线程ID和软件构件ID之间的映射关系。维护一张表记录线程与软件构件的对应关系,以判断是否发生线程转移,如发生,则更新该表。
[0044] (2)进行Java代码进入Native代码的适配操作。提供了调用接口,软件构件监测点只需通过调用中央桥接器提供的接口就可以实现JVM的底层操作。
[0045] (3)收集软件构件的信息。信息收集分为三个阶段:软件构件加载阶段,从OSGi平台获取软件构件对外暴露的调用接口;软件构件调用阶段,更新软件构件与线程的对应关系;资源信息采集阶段,将由JVM监测器统计到的软件构件资源信息返回给管理控制台。
[0046] 4.管理控制台
[0047] 采用Web形式管理软件构件监测系统。通过与中央桥接器交互,以设置监测参数并获得系统监测信息:
[0048] (1)设置监测参数。管理人员根据具体需求来调整统计的周期。同时,提供了用户接口,可由管理员配置需要监控的软件构件名称以减少系统开销。
[0049] (2)展示软件构件状态。周期性的收集软件构件信息,并以图形化的方式实时动态显示软件构件交互行为图,以及各个软件构件的资源使用情况。
[0050] 和现有技术相比,本发明的基于OSGi的软件构件监测方法与系统具有以下几个优点:
[0051] (1)实时反映软件构件间的交互行为,而现有方法只能对静态接口进行依赖分析,缺乏运行时的动态监测。
[0052] (2)以软件构件为粒度的监测,通过采用软件构件与线程标记的方法,将现有方法以线程或方法为粒度的监测上升到了软件构件粒度。
[0053] (3)具有兼容性,本系统遵循OSGi标准规范开发,通过监测点注入的方法实现监测,原有基于OSGi的构件化软件中,无需修改OSGi平台实现或应用,便可使用。
[0054] (4)较低的开销,采用线程跟踪的方法进行监测,仅当线程在软件构件间转移时才进行统计和更新操作,不改变原有系统执行流程,是轻量级系统,适用于实际运行环境中。
[0055] 本发明的有益效果是:可以获得软件构件在运行时所占用的内存和CPU资源,并展现出软件构件间的交互行为,从而为系统管理人员提供可靠性分析和异常诊断的依据。

附图说明

[0056] 图1是本发明软件构件监测系统的结构示意图。
[0057] 图2是软件构件的交互行为示意图。
[0058] 图3是监测代码注入的示例图。

具体实施方式

[0059] 下面通过具体实施例结合附图对本发明作进一步的说明。
[0060] 1.监测点注入器的实现
[0061] 监测点注入器实现代码的注入功能从注入的方式、注入的位置和注入的内容等三个方面进行考虑。
[0062] (1)实现技术:采用ASM作为Java字节码操控框架,在OSGi和软件构件进行类加载时,实现类代码的动态注入。
[0063] (2)OSGi注入:当软件构件部署到OSGi时,OSGi首先自动完成对软件构件Manifest元文件的解析工作,注入器在OSGi每次软件构件解析完成后的位置注入代码。该段代码的内容是,与中央桥接器建立联系,并将软件构件导出包的信息传递给中央桥接器。
[0064] (3)软件构件注入:当软件构件的类加载时,注入器首先从中央桥接器获取该软件构件对外导出包的信息,而后判断此要加载的类是否位于软件构件所声明导出的包当中。如果是,则对该类注入代码,使用该类所在的加载器标识此类。而后查找该类中的公共方法,在该方法的出口和入口部分插入监测代码,注入代码示例见附图3。当线程调用进入和退出该方法时,通过查看软件构件与线程的对应关系判断是否发生了线程在软件构件间的转移。
[0065] 2.JVM监测器的实现
[0066] (1)实现技术:JVM监测器通过Java虚拟机工具接口(Java Virtual Machine ToolkitInterface,JVMTI)与JVM进行通信,同步监控JVM的运行状态并跟踪Java线程状态的切换。软件构件通过中央桥接器与JVM监测器进行通信,因此,JVM监测器对运行中的Java应用程序是相对独立并且透明的,不会干扰程序的正常运行。JVM监测器以动态链接库的方式存在,Java程序启动时加载这个动态链接库。
[0067] (2)资源的标识:JVM监测器标识线程、对象所属的软件构件。关于创建的对象标记,通过在Object类的默认构造方法的入口和几种newarray指令后注入代码,根据创建对象的线程所属的软件构件为对象打标记,线程的创建也做相同的处理;关于线程的标记,当中央桥接器发现软件构件与线程之间的对应关系发生改变时通知JVM监测器,JVM监测器更改对此线程的标记。
[0068] (3)资源的统计:对于软件构件所占用的内存,采用被动统计方式,当收到桥接器发出的资源统计命令时,按照对象的软件构件ID将对象进行分组,计算出来各组中对象占用空间的总和,即是对应的软件构件所占用的内存空间;对于软件构件所占用的CPU时间,采用主动统计方式,线程进入和退出软件构件时都会进行标记,这样,当发生线程在软件构件间转移时,及时统计两个标记点之间线程在软件构件中所占用的CPU时间,并累加到对应软件构件。
[0069] 3.中央桥接器的实现
[0070] (1)实现技术:标识线程在不同软件构件间的转移,都要从软件构件的Java代码进入JVM的Native代码,而中央桥接器采用Java本机接口(Java Native Interface,JNI)将Java代码与使用C语言编写的代码相集成,完成了适配功能。
[0071] (2)判断线程在软件构件间的转移:采用链表数组的数据结构存储各个软件构件的信息。每个软件构件作为数组的一个元素,将软件构件ID作为数组元素的索引,链表指针作为数组元素的值。由于一个软件构件可以被多个线程同时调用,将每个线程信息保存在一个链表元素中,属于同一软件构件的多个线程形成链表,挂接到对应的软件构件的数组元素上。中央桥接器收到监测代码的通知时,检查软件构件ID与线程ID的关系是否改变,如未改变,则不作处理;发生改变,则更新链表数组,并交由JVM监测器做进一步处理。
[0072] (3)资源信息收集:通过两个Bean类CPUInfo、MemInfo记录软件构件的资源占用情况,包括CPU和内存占用信息。当收到管理控制台的调用请求时,向JVM监测器发送信息收集请求,而后将收集到的软件构件资源占用情况数据返回给管理控制台。
[0073] 4.管理控制台的实现
[0074] (1)实现技术:基于OSGi的管理控制台是一个B/S模式的远程管理工具,用户可以通过浏览器访问和操作。管理控制台以OSGi平台的软件构件形式实现,管理控制台调用OSGi的HTTP服务以支持远程Web访问;调用OSGi接口,暴露系统中各个软件构件的状态,可以对软件构件进行开始、停止和更新等操作;采用Flex技术实现可视化的操作界面。
[0075] (2)软件构件交互行为图的创建与更新:中央桥接器记录了线程在软件构件之间的转移,由此获得软件构件之间的调用行为。软件构件交互行为图由下文式中表示,管理控制台监听OSGi的事件中心,当有软件构件加入系统时,在图中为其创建一个节点。在运行过程中,中央桥接器跟踪线程在软件构件间的转移并进行记录。管理控制台周期性的请求记录信息,当线程从软件构件i到软件构件j发生转移,即软件构件i调用软件构件j的方法,如果图中不存在i到j的有向边则建立该边并设置权值eij。系统记录最近n个周期的调用情况,每个周期eij左移一位,若在此周期内被调用,则末位置1;若未被调用,则末位置0。
[0076] 软件构件交互行为图的描述见下式,同时可参见图2所示。
[0077] G={N,E}
[0078] N={s1,s2,...,si,...,sk},k=|N|,i=1,2,...,k
[0079] E={eij},0<i,j≤k,i≠j
[0080] eij=m1m2...mp...mn,mi=0|1
[0081] 其中,G为软件构件交互行为图,N为软件构件的集合,E为软件构件交互行为集合,ni为软件构件,k为软件构件数量,eij为软件构件i调用软件构件j,n为统计的采样周期总数,mp=1表示第p个采样周期服务i调用服务j。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用