交易死锁测试方法及装置与流程

文档序号:26142294发布日期:2021-08-03 14:27阅读:109来源:国知局
交易死锁测试方法及装置与流程

本发明涉及信息安全技术领域,具体地,涉及一种交易死锁测试方法及装置。



背景技术:

近年来,随着银行信息化进程的不断推进以及业务复杂度的不断提高,交易访问表的复杂度也有所提高。当两笔交易访问表顺序不一致时容易引发死锁。死锁为多个进程因争夺系统资源而产生的互相等待现象,一般为两个或两个以上的线程互相持有对方需要的资源,导致这些线程处于等待状态无法继续执行。

死锁产生的必要条件如下:

1、互斥:某种资源一次只允许一个进程访问,该资源被某个进程持有,其他进程不能再访问,直到该进程释放该资源。

2、占有且等待:一个进程本身持有资源(一种或多种),同时还等待其它进程释放持有的资源。

3、不可抢占:别人已经占有了某项资源,其它进程不可在资源未释放情况下进行抢占。

4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。

当以上四个条件均满足就会造成死锁。死锁发生后,发生死锁的进程无法执行,它们所持有的资源也无法释放,导致cpu的吞吐量下降,浪费系统资源,影响计算机的使用性能。

生产上发生死锁后,主机可以通过打印死锁报表了解死锁交易、死锁交易持有的资源以及等待的资源。测试人员需要在测试环境重现死锁、验证修改后代码是否解决当前死锁问题以及验证是否有新的死锁产生。

图1是现有技术中测试架构的示意图。如图1所示,压力测试服务器①发送执行a、b死锁交易的业务请求->主机网关②解析业务请求,得到解析结果->主机操作系统③根据解析结果在db2数据库执行业务逻辑处理和sql(structuredquerylanguage,结构化查询语言)->db2数据库④返回sql结果->主机操作系统⑤根据sql结果返回业务结果->压力测试服务器⑥接收业务结果。

由此可以看出,现有技术覆盖业务场景进行盲目压力测试,在出现失败交易时打印死锁报表验证是否发生死锁。如果出现死锁并且死锁交易所持有的资源与生产场景一致则认为重现了死锁场景,否则认为未重现生产死锁现象。压力测试中可能出现线程未出现循环等待的情况,因此现有技术存在多轮测试仍无法重现生产死锁场景的可能性。



技术实现要素:

本发明实施例的主要目的在于提供一种交易死锁测试方法及装置,以在测试环境有效重现死锁,保证死锁测试的准确性。

为了实现上述目的,本发明实施例提供一种交易死锁测试方法,包括:

根据预先获得的第一业务数据执行第一交易,当第一交易持有预设资源时停止执行第一交易;

根据预先获得的第二业务数据执行第二交易,当第二交易进入等待状态时继续执行第一交易,得到第一交易执行结果和第二交易执行结果;

根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果。

本发明实施例还提供一种交易死锁测试装置,包括:

第一交易执行模块,用于根据预先获得的第一业务数据执行第一交易,当第一交易持有预设资源时停止执行第一交易;

执行结果获得模块,用于根据预先获得的第二业务数据执行第二交易,当第二交易进入等待状态时继续执行第一交易,得到第一交易执行结果和第二交易执行结果;

测试结果输出模块,用于根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,处理器执行计算机程序时实现所述的交易死锁测试方法的步骤。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现所述的交易死锁测试方法的步骤。

本发明实施例的交易死锁测试方法及装置先执行第一交易并在第一交易持有预设资源时停止执行,再执行第二交易并在第二交易进入等待状态时继续执行第一交易以得到第一交易执行结果和第二交易执行结果,最后根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果,可以在测试环境有效重现死锁,保证死锁测试的准确性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术中测试架构的示意图;

图2是本发明一实施例中交易死锁测试方法的测试架构示意图;

图3是本发明一实施例中交易死锁测试方法的流程图;

图4是本发明另一实施例中交易死锁测试方法的流程图;

图5是本发明一实施例中死锁报表的第一业务示意图;

图6是本发明一实施例中死锁报表的第二业务示意图;

图7是本发明实施例中交易死锁测试装置的结构框图;

图8是本发明实施例中计算机设备的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

鉴于现有技术存在多轮测试仍无法重现生产死锁场景的可能性,本发明实施例提供一种交易死锁测试方法,首先分析死锁报表,然后梳理出死锁交易持有的资源和等待的资源。以两个进程死锁为例,首先分析死锁报表可以发现进程p1持有表ta1的锁,等待表tb1的资源;进程p2持有表tb1的锁,等待表ta1的资源。然后通过pcomm跟踪进程p1,当p1持有表ta1的锁之后执行进程p2。当进程p2处于等待状态后释放进程p1并通过pcomm进行跟踪;然后打印db2数据库的死锁报表,分析执行结果,在测试环境有效重现死锁现象,保证死锁测试的准确性。以下结合附图对本发明进行详细说明。

图2是本发明一实施例中交易死锁测试方法的测试架构示意图。图2与图1所示的测试架构基本一致,只在测试过程中采用了pcomm进行交易跟踪,交易发起由压力测试变更为单体测试。如图2所示,测试过程中由功能测试客户端①启动pcomm软件,链接主机操作系统发起交易跟踪->功能测试客户端②发送执行被跟踪的a、b死锁交易的业务请求->主机网关③解析业务请求,得到解析结果->主机操作系统④根据解析结果在db2数据库执行业务逻辑处理和sql(structuredquerylanguage,结构化查询语言)->db2数据库⑤返回sql结果->功能测试客户端⑥结束跟踪->主机操作系统⑦根据sql结果返回业务结果->功能测试客户端⑧接收业务结果。其中,交易进入跟踪状态后可以采用单步执行和调用程序模式相结合的方式执行到死锁报表中交易a持有表ta1的锁,然后再执行交易b。

图3是本发明一实施例中交易死锁测试方法的流程图。图4是本发明另一实施例中交易死锁测试方法的流程图。图5是本发明一实施例中死锁报表的第一业务示意图。图6是本发明一实施例中死锁报表的第二业务示意图。如图3-图6所示,交易死锁测试方法包括:

s101:根据预先获得的第一业务数据执行第一交易,当第一交易持有预设资源时停止执行第一交易。

在执行s101之前,还包括:分析生产死锁报表,得到第一业务数据、第二业务数据和预设资源。

以图5和图6为例,可以看出第一交易ov2s在访问表ssrspkg时出现死锁,第二交易ov2r在访问表ssriqf2时出现死锁。第二交易ov2r持有表ssriqf2中page=x'024001a9'的锁,在等待表ssrspkg中page=x'024004d3'资源;而第一交易ov2s持有表ssrspkg中page=x'024004d3'的锁,在等待表ssriqf2中page=x'024001a9'的资源。

其中,第一业务数据包括表ssrspkg及表ssrspkg中的资源,第二业务数据包括表ssriqf2及表ssriqf2中的资源,预设资源为第二交易ov2r所需等待的资源page=x'024004d3'。

s102:根据预先获得的第二业务数据执行第二交易,当第二交易进入等待状态时继续执行第一交易,得到第一交易执行结果和第二交易执行结果。

具体实施时,当第二交易进入等待状态时表明第二交易所需的资源被第一交易持有,此时释放第一交易可以验证是否重现生产死锁报表中的生产死锁场景。

一实施例中,s102还包括:当第二交易未进入等待状态时,输出交易死锁测试失败结果。

其中,交易死锁测试成功的前置条件是第二交易进入等待状态:当第一交易ov2s持有第二交易ov2r所需的资源page=x'024004d3'时,第二交易ov2r必定进入等待状态。当第二交易未进入等待状态时,表明生产死锁报表的分析结果与实际死锁数据不匹配,测试失败。

s103:根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果。

一实施例中,s103包括:当第一交易执行失败且第二交易执行成功,或第一交易执行成功且第二交易执行失败时,输出交易死锁测试成功结果。

其中,当交易死锁测试成功重现生产死锁报表中的生产死锁场景时,会随机牺牲其中一个交易进程以解决当前死锁问题,被牺牲掉的进程所做的交易会失败。因此当第一交易执行失败且第二交易执行成功,或第一交易执行成功且第二交易执行失败时,表明交易死锁测试成功。当第一交易和第二交易均执行成功,或第一交易和第二交易均执行失败时,表明交易死锁测试失败。

主机操作系统还可以打印测试死锁报表,通过测试死锁报表判断是否产生死锁。当测试死锁报表中未产生死锁时,则说明生产死锁报表的分析结果与实际死锁数据不匹配,需要重新分析生产死锁报表并重新进行数据准备(准备第一业务数据、第二业务数据和预设资源)。如产生了死锁,并且测试死锁报表中互相等待的资源与生产死锁报表一致,则可认为重现了生产问题,交易死锁测试成功

图3所示的交易死锁测试方法的执行主体可以为主机操作系统。由图3所示的流程可知,本发明实施例的交易死锁测试方法先执行第一交易并在第一交易持有预设资源时停止执行,再执行第二交易并在第二交易进入等待状态时继续执行第一交易以得到第一交易执行结果和第二交易执行结果,最后根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果,可以在测试环境有效重现死锁,保证死锁测试的准确性。

死锁重现后,开发人员需修改程序。此时可以按照统一规范调整死锁资源顺序以避免产生死锁。例如按照主表和次要表对需访问资源进行排序,优先锁定主表资源。当一张表需要访问多条记录时可考虑在对访问记录提前排序后进行资源锁定。解除死锁的方式有很多,此处不一一列举。开发人员在修改程序后可以使用同样的方法继续验证在相同场景下是否产生死锁。如果未产生死锁则可认为修改后的程序解决了生产上的死锁情况。

本发明实施例的具体流程如下:

1、分析生产死锁报表,得到第一业务数据、第二业务数据和预设资源。

2、根据预先获得的第一业务数据执行第一交易,当第一交易持有预设资源时停止执行第一交易。

3、根据预先获得的第二业务数据执行第二交易,当第二交易进入等待状态时继续执行第一交易,得到第一交易执行结果和第二交易执行结果。当第二交易未进入等待状态时,输出交易死锁测试失败结果。

4、当第一交易执行失败且第二交易执行成功,或第一交易执行成功且第二交易执行失败时,输出交易死锁测试成功结果。

综上所述,本发明实施例提供的交易死锁测试方法具有以下有益效果:

当生产上发生死锁后,测试人员可以在测试环境有效重现死锁,并且验证修改后代码是否解决当前死锁问题。本发明从分析死锁报表开始,使测试更有针对性,能够有效重现生产死锁情况,避免无效测试,保证测试的准确性。为保证最后修改效果,在生产死锁情况测试完成后可以针对典型交易再开展多轮性能测试,验证是否有新的死锁产生。

基于同一发明构思,本发明实施例还提供了一种交易死锁测试装置,由于该装置解决问题的原理与交易死锁测试方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

图7是本发明实施例中交易死锁测试装置的结构框图。如图7所示,交易死锁测试装置包括:

第一交易执行模块,用于根据预先获得的第一业务数据执行第一交易,当第一交易持有预设资源时停止执行第一交易;

执行结果获得模块,用于根据预先获得的第二业务数据执行第二交易,当第二交易进入等待状态时继续执行第一交易,得到第一交易执行结果和第二交易执行结果;

测试结果输出模块,用于根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果。

在其中一种实施例中,还包括:

分析模块,用于分析生产死锁报表,得到第一业务数据、第二业务数据和预设资源。

在其中一种实施例中,测试结果输出模块具体用于:

当第一交易执行失败且第二交易执行成功,或第一交易执行成功且第二交易执行失败时,输出交易死锁测试成功结果。

在其中一种实施例中,测试结果输出模块还用于:

当第二交易未进入等待状态时,输出交易死锁测试失败结果。

综上,本发明实施例的交易死锁测试装置先执行第一交易并在第一交易持有预设资源时停止执行,再执行第二交易并在第二交易进入等待状态时继续执行第一交易以得到第一交易执行结果和第二交易执行结果,最后根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果,可以在测试环境有效重现死锁,保证死锁测试的准确性。

本发明实施例还提供能够实现上述实施例中的交易死锁测试方法中全部步骤的一种计算机设备的具体实施方式。图8是本发明实施例中计算机设备的结构框图,参见图8,所述计算机设备具体包括如下内容:

处理器(processor)801和存储器(memory)802。

所述处理器801用于调用所述存储器802中的计算机程序,所述处理器执行所述计算机程序时实现上述实施例中的交易死锁测试方法中的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:

根据预先获得的第一业务数据执行第一交易,当第一交易持有预设资源时停止执行第一交易;

根据预先获得的第二业务数据执行第二交易,当第二交易进入等待状态时继续执行第一交易,得到第一交易执行结果和第二交易执行结果;

根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果。

综上,本发明实施例的计算机设备先执行第一交易并在第一交易持有预设资源时停止执行,再执行第二交易并在第二交易进入等待状态时继续执行第一交易以得到第一交易执行结果和第二交易执行结果,最后根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果,可以在测试环境有效重现死锁,保证死锁测试的准确性。

本发明实施例还提供能够实现上述实施例中的交易死锁测试方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的交易死锁测试方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:

根据预先获得的第一业务数据执行第一交易,当第一交易持有预设资源时停止执行第一交易;

根据预先获得的第二业务数据执行第二交易,当第二交易进入等待状态时继续执行第一交易,得到第一交易执行结果和第二交易执行结果;

根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果。

综上,本发明实施例的计算机可读存储介质先执行第一交易并在第一交易持有预设资源时停止执行,再执行第二交易并在第二交易进入等待状态时继续执行第一交易以得到第一交易执行结果和第二交易执行结果,最后根据第一交易执行结果和第二交易执行结果输出交易死锁测试结果,可以在测试环境有效重现死锁,保证死锁测试的准确性。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元,或装置都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1