基于自组织映射模型云软件性能异常错误诊断方法与系统转让专利

申请号 : CN201610077926.X

文献号 : CN105677572B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邹德清代炜琦文子龙金海

申请人 : 华中科技大学

摘要 :

本发明公开了一种基于自组织映射模型的云软件性能异常错误诊断方法,包括:追踪记录待检测的软件在云环境中运行时的系统调用信息;分析出现性能异常的虚拟机上软件运行时系统调用序列,划分每个进程对应的系统调用序列;根据划分得到的进程系统调用序列建立检测模型,并对可疑进程进行异常检测;计算出现异常的进程中最相关的系统调用,排序后输出。本发明能够准确完整地记录软件运行时的行为,能够自动化建模并且检测出异常的系统运行过程,能够更准确地定位异常运行过程相关的系统调用。本方案旨在提供一种在性能异常错误发生时自动化分析定位造成性能异常错误的相关系统调用的方法,更快速高效的帮助开发者定位并解决软件中潜在的性能bug。

权利要求 :

1.一种基于自组织映射模型的云软件性能异常错误诊断方法,其特征在于,包括以下步骤:(1)追踪记录待检测的软件在云环境中运行时的系统调用信息;

(2)分析出现性能异常的虚拟机上软件运行时系统调用序列,划分每个进程对应的系统调用序列,系统调用序列采用两个向量表示,一个向量的值代表某种系统调用的平均执行时间,另一个向量的值代表某种系统调用的执行次数;

(3)根据划分得到的进程系统调用序列建立自组织映射检测模型,并对可疑进程进行异常检测;

(4)计算异常进程中异常系统调用序列与正常邻居系统调用序列之间的差异,对差异进行排序,得到进程异常最相关的系统调用输出;

所述步骤(3)中对可疑进程进行异常检测具体包括以下子步骤:

(3-1)将进程对应的系统调用序列集合,根据其最终结束时间在虚拟机异常产生前后划分为两个集合,即异常发生前进程系统调用序列集合和异常发生时进程系统调用序列集合;

(3-2)将步骤(3-1)中的异常发生前系统调用序列集合中的系统调用序列作为训练数据,建立自组织映射模型;

(3-3)使用步骤(3-2)中建立的自组织映射模型作为检测标准,将步骤(3-1)中的异常发生时系统调用序列集合中的每个序列输入该模型,判断每个序列是否异常。

2.根据权利要求1中所述的诊断方法,其特征在于,步骤(1)中软件系统调用序列信息包括系统调用名、执行的进程或者线程号开始时间和结束时间。

3.一种基于自组织映射模型的云软件性能异常错误诊断系统,其特征在于,包括记录模块、划分模块、检测模块以及诊断模块,其中:所述记录模块,用于追踪记录待检测的软件在云环境中运行时的系统调用信息;

所述划分模块,用于分析出现性能异常的虚拟机上软件运行时系统调用序列,划分每个进程对应的系统调用序列;

所述检测模块,用于根据划分得到的进程系统调用序列建立自组织映射检测模型,并对可疑进程进行异常检测;

所述诊断模块,用于计算异常进程中异常系统调用序列与正常邻居系统调用序列之间的差异,对差异进行排序,得到进程异常最相关的系统调用输出;

所述检测模块对可疑进程进行异常检测具体包括以下子模块:

第(3-1)子模块,用于将进程对应的系统调用序列集合,根据其最终结束时间在虚拟机异常产生前后划分为两个集合,即异常发生前进程系统调用序列集合和异常发生时进程系统调用序列集合;

第(3-2)子模块,用于将第(3-1)子模块中的异常发生前系统调用序列集合中的系统调用序列作为训练数据,建立自组织映射模型;

第(3-3)子模块,用于使用第(3-2)子模块中建立的自组织映射模型作为检测标准,将第(3-1)子模块中的异常发生时系统调用序列集合中的每个序列输入该模型,判断每个序列是否异常。

说明书 :

基于自组织映射模型云软件性能异常错误诊断方法与系统

技术领域

[0001] 本发明属于计算机软件类错误诊断领域,更具体地,涉及一种基于自组织映射模型的云软件性能异常错误诊断方法与系统。

背景技术

[0002] 云计算环境中,性能异常错误变成了用户最关心的问题之一。由于性能bug引起的系统性能下降,会影响对用户的服务质量,甚至造成服务等级协议违例,产生严重的经济损失。但是很多时候性能bug的诊断是很困难的。首先,性能bug的触发依赖于特定的输入或者特殊的配置,在特定的条件下才会出现,难以重现。然后,性能bug触发之后,很少会输出错误信息,无法直接给开发者提供相关的诊断信息。为了帮助开发者自动分析错误产生的原因,错误诊断系统成为当前急切需要的新技术。
[0003] 一般来说,目前的性能异常错误检测诊断方法主要分为两大类。一类是静态检测及诊断技术,通过审查程序源代码或者分析程序bug报告,从中发现某种性能bug的特点,包括出现的上下文条件,表现形式等方面。然后根据发现的特点提取检查性能bug的规则,定制一个相应的性能bug检测器,通过遍历源代码,从中发现潜在的性能bug错误。这种方法需要人工分析提取各种性能bug的具体特征,制定检测的规则,难以广泛扩展应用。另一类则是在线性能异常检测诊断技术。通过在软件运行时监测系统性能指标变化,建立系统性能指标变化模型,实时检测系统性能指标是否出现异常。当发现系统性能异常出现的时候,将会开始自动诊断性能异常错误出现的原因。现有的性能异常错误原因诊断技术多是通过计算系统性能指标和性能异常之间的相关性,识别错误相关的系统指标。这样的诊断是粗粒度的,只能够给开发者提供有限的帮助。
[0004] 综上所述,现有的软件性能异常错误检测及诊断方案存在如下不足:
[0005] 基于源代码的静态代码检测诊断技术,依赖于开发人员的经验和技术水平,需要耗费大量人力,并且只能处理有限的几种性能异常bug,难以广泛地扩展应用;在线性能异常检测诊断技术可以动态捕捉系统性能异常的出现,但是检测到异常出现之后,难以定位异常出现的位置,不能有效的帮助开发者找出异常出现的原因。

发明内容

[0006] 针对现有技术的以上缺点或者改进需求,本发明提供了一种基于自组织映射模型的云软件性能异常错误诊断方法,其目的在于,解决现有软件性能异常错误检测诊断方法中存在的依赖于大量人工工作无法有效扩展的、难以定位异常出现的位置不能有效帮助开发者找出异常出现的原因的技术问题。
[0007] 为了实现上述目的,按照本发明的一个方面,提供了一种基于自组织映射模型的云软件性能异常错误诊断方法,包括以下步骤:
[0008] (1)追踪记录待检测的软件在云环境中运行时的系统调用信息;
[0009] (2)分析出现性能异常的虚拟机上软件运行时系统调用序列,划分每个进程对应的系统调用序列;
[0010] (3)根据划分得到的进程系统调用序列建立检测模型,并对可疑进程进行异常检测;
[0011] (4)计算出现异常的进程中最相关的系统调用,排序后输出。
[0012] 本发明的一个实施例中,步骤(1)中软件系统调用序列信息包括系统调用名、执行的进程或者线程号开始时间和结束时间。
[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] (1)能够在线自动化自动定位造成性能异常出现的系统调用序列,可以及时自动捕捉偶然出现的系统性能异常bug,节省了大量人工测试以及检查的时间和成本。
[0025] (2)能够发现性能异常出现的原因,自动准确定位与性能异常bug相关的系统调用函数,帮助开发者更有效快速的找到并解决系统中的性能异常bug,有效避免系统出现更严重的问题。
[0026] (3)采用了基于动态追踪技术,能够在不需要离线bug重现以及没有应用程序源代码的情况下,自动检测并诊断性能异常bug的出现,具有更广阔的应用场景。
[0027] (4)采用了无监督的学习模型,能够在系统运行时自动训练系统运行时模型,不需要提前准备人工进行标记过的正常和异常数据对模型进行训练,方便检测系统的快速应用和部署。

附图说明

[0028] 图1是本发明基于自组织映射模型的云软件性能异常错误诊断方法的流程图;
[0029] 图2是对系统调用序列进行异常检测的过程;
[0030] 图3是构建自组织映射模型的过程;
[0031] 图4是利用构建的自组织映射模型进行异常检测的过程。

具体实施方式

[0032] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0033] 本发明的整体思路在于,当发现系统出现性能异常的时候,利用记录的系统运行时系统调用情况,检测出异常的系统运行过程,定位造成性能异常出现的相关系统调用。
[0034] 如图1所示,本发明基于自组织映射模型的云软件性能异常错误诊断方法包括以下步骤:
[0035] (1)启动待检测的软件,周期性的收集软件所在虚拟机的系统指标数据。同时记录软件函数调用和系统调用序列信息。软件系统调用序列信息包括系统调用名,执行进程或者线程号,开始和结束时间。这些信息可以通过LTTng工具动态追踪程序运行获得。
[0036] (2)读取异常虚拟机上软件运行时系统调用序列,划分每次请求服务对应的系统调用序列。系统调用序列同样分为进入和退出两种记录,具体包括{进入或退出时间戳,程序名ppid,进程ID,线程ID,cpu ID}。根据记录的进程线程ID,可以把记录的所有系统调用序列划分到相应的集合。一般来说,某段时间内的每个进程线程代表一次独立地对请求的处理过程。特别地,有些应用程序采用了基于线程池的设计执行方式。使得,一个线程的行为随着时间的变化会变得不同。为此,我们引入时间间隔来解决这个问题。我们计算连续两个系统调用之间的时间间隔,如果其时间间隔大于设定的阈值,则认为该线程已经被重新利用,是一次新的请求处理过程。这样,就能分割每一次独立的请求处理过程,得到每次请求服务对应的系统调用序列。
[0037] (3)对每个函数的系统调用序列集合,进行异常检测。具体过程如图2所示,本步骤具体包括以下子步骤:
[0038] (3-1)将函数对应的系统调用序列集合,根据其最终结束时间在异常虚拟机异常产生前后划分为两个集合,即异常发生前系统调用序列集合和异常发生时系统调用序列集合。
[0039] (3-2)将步骤(3-1)中的异常发生前系统调用序列集合中的系统调用序列作为训练数据,建立自组织映射(SOM)模型。
[0040] 自组织映射模型的训练过程如图3所示。SOM模型是一系列神经元节点的集合,每个神经元节点表示一个权重向量,并且在模型中有自己的位置。
[0041] 一个SOM模型的训练过程,就是动态更新权重向量的过程。我们利用步骤(3-1)中异常发生前的进程对应系统调用序列作为训练数据。对于每个系统调用序列,我们用两个向量表示。向量的长度为所有系统调用类型的数量,向量中每个位置对应一个系统调用类型。这两个向量中一个向量的值代表某种系统调用的平均执行时间,另一个向量的值代表某种系统调用的执行次数。我们针对这两种向量分别建立两个SOM模型。
[0042] 对于每一个作为训练数据的系统调用对应的向量,我们首先在计算它与模型中所有节点权重向量的欧几里得距离,找到与它距离最小的神经元节点,我们把该节点称做当前训练过程中待训练节点。然后我们需要更新带训练节点的邻居节点对应的权重向量的值。权重向量值的更新公式为W(t+1)=W(t)+N(v,t)L(t)(D(t)-W(t))。其中W(t)定义为节点在状态t的权重向量的值。W(t+1)表示更新后的及诶单的权重向量的值。D(t)定义为当前训练数据的系统调用对应的向量值。N(v,t)定义为与邻居节点与待训练节点的距离相关的函数。L(t)定义为学习调整因子,用来修正训练过程中权值的改变程度。使用这个公式我们更新模型矩阵中与待训练节点距离为1的所有邻居节点的权重向量值。使用所有训练数据训练模型结束后,我们就得到了可以描述软件运行时的系统调用行为的模型。
[0043] (3-3)使用步骤(3-2)中建立的自组织映射模型作为检测标准,将步骤(3-1)中的异常发生时系统调用序列集合中的每个序列输入该模型,判断每个序列是否异常。
[0044] 步骤(3-2)建立的SOM模型在训练完成后,被训练次数越多的节点与它的邻居节点之间的权重值越接近。而一个节点被训练的频次越高,表明它代表的状态出现的频次越高,我们认为该状态是正常状态。所以利用该模型的检测过程如图4所示。我们利用步骤(3-2)中训练完成的两个SOM模型对步骤(3-1)中得到的异常发生时的所有进程的系统调用序列进行检测。对于每个系统调用序列对应的两个向量分别用相应的SOM模型进行检测。
[0045] 对于每个待检测的向量,我们首先计算它与模型中所有神经元节点权值向量的欧几里得距离,找到与它距离最小的节点。然后计算该节点与其所有邻居节点的权值向量的欧几里得距离并求出距离和。比较该和值与阈值,如果超过阈值,则表明该节点与其邻居之间差值太大。根据模型的训练过程可知,该节点被训练的频次是很少的,表明当前状态是极少出现甚至从来没有出现过的,由此我们认为当前状态是异常状态,当前被检测的向量出现了异常。无论是基于执行时间的模型还是基于执行次数的模型检测出了异常,我们都认为该进程执行过程出现了异常。
[0046] (4)将检测出有异常的函数排序后输出。计算异常进程中最相关的系统调用需要计算异常系统调用节点与正常邻居节点之间的差异,然后采用多数投票方式选择出最相关的系统调用。可能某些异常节点的距离最近的邻居节点中并没有正常邻居节点或者正常邻居节点数量过少,因此我们需要增加邻居的范围,知道找出足够数量的正常邻居节点。然后计算正常节点和异常节点属性之间的绝对差值,最终根据每个系统调用对应的属性值的绝对差值进行排序,得到进行性能异常最相关的系统调用输出给用户。帮助用户更好的理解系统出现异常的原因并找到系统出现异常的位置。
[0047] 进一步地,本发明还提供了一种基于自组织映射模型的云软件性能异常错误诊断系统,包括记录模块、划分模块、检测模块以及诊断模块,其中:
[0048] 所述记录模块,用于追踪记录待检测的软件在云环境中运行时的系统调用信息;
[0049] 所述划分模块,用于分析出现性能异常的虚拟机上软件运行时系统调用序列,划分每个进程对应的系统调用序列;
[0050] 所述检测模块,用于根据划分得到的进程系统调用序列建立检测模型,并对可疑进程进行异常检测;
[0051] 所述诊断模块,用于计算出现异常的进程中最相关的系统调用,排序后输出。
[0052] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。