基于自组织映射模型云软件性能异常错误诊断方法与系统的制作方法
【技术领域】
[0001 ]本发明属于计算机软件类错误诊断领域,更具体地,涉及一种基于自组织映射模型的云软件性能异常错误诊断方法与系统。
【背景技术】
[0002]云计算环境中,性能异常错误变成了用户最关心的问题之一。由于性能bug引起的系统性能下降,会影响对用户的服务质量,甚至造成服务等级协议违例,产生严重的经济损失。但是很多时候性能bug的诊断是很困难的。首先,性能bug的触发依赖于特定的输入或者特殊的配置,在特定的条件下才会出现,难以重现。然后,性能bug触发之后,很少会输出错误信息,无法直接给开发者提供相关的诊断信息。为了帮助开发者自动分析错误产生的原因,错误诊断系统成为当前急切需要的新技术。
[0003]—般来说,目前的性能异常错误检测诊断方法主要分为两大类。一类是静态检测及诊断技术,通过审查程序源代码或者分析程序bug报告,从中发现某种性能bug的特点,包括出现的上下文条件,表现形式等方面。然后根据发现的特点提取检查性能bug的规则,定制一个相应的性能bug检测器,通过遍历源代码,从中发现潜在的性能bug错误。这种方法需要人工分析提取各种性能bug的具体特征,制定检测的规则,难以广泛扩展应用。另一类则是在线性能异常检测诊断技术。通过在软件运行时监测系统性能指标变化,建立系统性能指标变化模型,实时检测系统性能指标是否出现异常。当发现系统性能异常出现的时候,将会开始自动诊断性能异常错误出现的原因。现有的性能异常错误原因诊断技术多是通过计算系统性能指标和性能异常之间的相关性,识别错误相关的系统指标。这样的诊断是粗粒度的,只能够给开发者提供有限的帮助。
[0004]综上所述,现有的软件性能异常错误检测及诊断方案存在如下不足:
[0005]基于源代码的静态代码检测诊断技术,依赖于开发人员的经验和技术水平,需要耗费大量人力,并且只能处理有限的几种性能异常bug,难以广泛地扩展应用;在线性能异常检测诊断技术可以动态捕捉系统性能异常的出现,但是检测到异常出现之后,难以定位异常出现的位置,不能有效的帮助开发者找出异常出现的原因。
【发明内容】
[0006]针对现有技术的以上缺点或者改进需求,本发明提供了一种基于自组织映射模型的云软件性能异常错误诊断方法,其目的在于,解决现有软件性能异常错误检测诊断方法中存在的依赖于大量人工工作无法有效扩展的、难以定位异常出现的位置不能有效帮助开发者找出异常出现的原因的技术问题。
[0007]为了实现上述目的,按照本发明的一个方面,提供了一种基于自组织映射模型的云软件性能异常错误诊断方法,包括以下步骤:
[0008](I)追踪记录待检测的软件在云环境中运行时的系统调用信息;
[0009](2)分析出现性能异常的虚拟机上软件运行时系统调用序列,划分每个进程对应的系统调用序列;
[0010](3)根据划分得到的进程系统调用序列建立检测模型,并对可疑进程进行异常检测;
[0011 ] (4)计算出现异常的进程中最相关的系统调用,排序后输出。
[0012]本发明的一个实施例中,步骤(I)中软件系统调用序列信息包括系统调用名、执行的进程或者线程号开始时间和结束时间。
[0013]本发明的一个实施例中,步骤(3)中对可疑进程进行异常检测具体包括以下子步骤:
[0014](3-1)将进程对应的系统调用序列集合,根据其最终结束时间在虚拟机异常产生前后划分为两个集合,即异常发生前进程系统调用序列集合和异常发生时进程系统调用序列集合;
[0015](3-2)将步骤(3-1)中的异常发生前系统调用序列集合中的系统调用序列作为训练数据,建立自组织映射模型。
[0016](3-3)使用步骤(3-2)中建立的自组织映射模型作为检测标准,将步骤(3-1)中的异常发生时系统调用序列集合中的每个序列输入该模型,判断每个序列是否异常。
[0017]本发明的一个实施例中,步骤(4)中计算异常进程中最相关的系统调用需要计算异常系统调用节点与正常邻居节点之间的差异,然后采用多数投票方式选择出最相关的系统调用。
[0018]按照本发明的另一方面,提供了基于自组织映射模型的云软件性能异常错误诊断系统,包括记录模块、划分模块、检测模块以及诊断模块,其中:
[0019]所述记录模块,用于追踪记录待检测的软件在云环境中运行时的系统调用信息;
[0020]所述划分模块,用于分析出现性能异常的虚拟机上软件运行时系统调用序列,划分每个进程对应的系统调用序列;
[0021 ]所述检测模块,用于根据划分得到的进程系统调用序列建立检测模型,并对可疑进程进行异常检测;
[0022]所述诊断模块,用于计算出现异常的进程中最相关的系统调用,排序后输出。
[0023]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0024](I)能够在线自动化自动定位造成性能异常出现的系统调用序列,可以及时自动捕捉偶然出现的系统性能异常bug,节省了大量人工测试以及检查的时间和成本。
[0025](2)能够发现性能异常出现的原因,自动准确定位与性能异常bug相关的系统调用函数,帮助开发者更有效快速的找到并解决系统中的性能异常bug,有效避免系统出现更严重的问题。
[0026](3)采用了基于动态追踪技术,能够在不需要离线bug重现以及没有应用程序源代码的情况下,自动检测并诊断性能异常bug的出现,具有更广阔的应用场景。
[0027](4)采用了无监督的学习模型,能够在系统运行时自动训练系统运行时模型,不需要提前准备人工进行标记过的正常和异常数据对模型进行训练,方便检测系统的快速应用和部署。
【附图说明】
[0028]图1是本发明基于自组织映射模型的云软件性能异常错误诊断方法的流程图;
[0029]图2是对系统调用序列进行异常检测的过程;
[0030]图3是构建自组织映射模型的过程;
[0031]图4是利用构建的自组织映射模型进行异常检测的过程。
【具体实施方式】
[0032]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0033]本发明的整体思路在于,当发现系统出现性能异常的时候,利用记录的系统运行时系统调用情况,检测出异常的系统运行过程,定位造成性能异常出现的相关系统调用。
[0034]如图1所示,本发明基于自组织映射模型的云软件性能异常错误诊断方法包括以下步骤:
[0035](I)启动待检测的软件,周期性的收集软件所在虚拟机的系统指标数据。同时记录软件函数调用和系统调用序列信息。软件系统调用序列信息包括系统调用名,执行进程或者线程号,开始和结束时间。这些信息可以通过LTTng工具动态追踪程序运行获得。
[0036](2)读取异常虚拟机上软件运行时系统调用序列,划分每次请求服务对应的系统调用序列。系统调用序列同样分为进入和退出两种记录,具体包括{进入或退出时间戳,程序名ppid,进程ID,线程ID,cpu ID}。根据记录的进程线程ID,可以把记录的所有系统调用序列划分到相应的集合。一般来说,某段时间内的每个进程线程代表一次独立地对请求的处理过程。特别地,有些应用程序采用了基于线程池的设计执行方式。使得,一个线程的行为随着时间的变化会变得不同。为此,我们引入时间间隔来解决这个问题。我们计算连续两个系统调用之间的时间间隔,如果其时间间隔大于设定的阈值,则认为该线程已经被重新利用,是一次新的请求处理过程。这样,就能分割每一次独立的请求处理过程,得到每次请求服务对应的系统调用序