一种异常处理方法、装置及其设备与流程

文档序号:22041504发布日期:2020-08-28 18:10阅读:85来源:国知局
一种异常处理方法、装置及其设备与流程

本申请涉及互联网技术领域,尤其涉及一种异常处理方法、装置及其设备。



背景技术:

apm(applicationperformancemanagement,应用性能管理)是一种通过对应用程序进行即时监控,以实现应用程序的性能管理以及故障管理的解决方案。具体的,apm能够对应用程序进行监控和优化,例如,能够监控应用程序在运行过程中的信息,如cpu(centralprocessingunit,中央处理器)使用率、qps(queriespersecond,每秒查询率)、日志等信息,从而提高应用程序的可靠性和质量,保证用户得到良好的服务,降低it总拥有成本,并提高竞争力。

在对应用程序进行监控的过程中,一旦应用程序出现异常,则会产生异常日志,维护人员可以通过异常日志分析异常原因。但是,维护人员分析异常原因的工作量比较大,可能无法准确分析出异常原因,用户体验比较差。



技术实现要素:

本申请提供一种异常处理方法,所述方法包括:

获取应用程序运行过程中产生的异常对象;

根据所述异常对象确定所述应用程序对应的原始数据的异常位置;

根据所述异常位置在所述原始数据中添加控制信息;

根据所述控制信息输出与所述异常位置对应的异常数据。

本申请提供一种异常处理方法,所述方法包括:

获取应用程序运行过程中产生的异常日志;其中,所述异常日志包括所述应用程序对应的原始数据中发生异常的数据行;

从所述原始数据中查询与所述数据行对应的子数据,在所述子数据中添加控制信息,所述控制信息用于指示输出与所述子数据对应的局部变量;

根据所述控制信息输出与所述子数据对应的局部变量。

本申请提供一种异常处理装置,所述装置包括:

获取模块,用于获取应用程序运行过程中产生的异常对象;

确定模块,用于根据所述异常对象确定所述应用程序对应的原始数据的异常位置;

添加模块,用于根据所述异常位置在所述原始数据中添加控制信息;

输出模块,用于根据所述控制信息输出与所述异常位置对应的异常数据。

本申请提供一种异常处理设备,所述设备包括:

处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:

获取应用程序运行过程中产生的异常对象;

根据所述异常对象确定所述应用程序对应的原始数据的异常位置;

根据所述异常位置在所述原始数据中添加控制信息;

根据所述控制信息输出与所述异常位置对应的异常数据。

基于上述技术方案,本申请实施例中,可以根据异常对象确定原始数据的异常位置,根据异常位置在原始数据中添加控制信息,根据控制信息输出与异常位置对应的异常数据(即用于分析异常原因的异常数据),这样,维护人员可以直接获知异常数据,并利用异常数据分析异常原因,而不是通过异常日志分析异常原因,能够准确分析异常原因,及时的修复异常问题,减少用户的工作量,用户体验比较好。上述方式能够快速得到异常数据,排查异常发生的详细过程,直接查看真实运行的异常数据,真正反应线上错误的执行过程。

附图说明

为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其它的附图。

图1是本申请一种实施方式中的异常处理方法的流程图;

图2是本申请另一种实施方式中的异常处理方法的流程图;

图3是本申请一种实施方式中的应用场景示意图;

图4是本申请另一种实施方式中的异常处理方法的流程图;

图5是本申请一种实施方式中的局部变量示意图;

图6是本申请一种实施方式中的异常处理装置的结构图;

图7是本申请一种实施方式中的异常处理设备的硬件结构图。

具体实施方式

在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本申请实施例中提出一种异常处理方法,该方法可以应用于任意设备(如服务器等),参见图1所示,为该方法的流程示意图,该方法可以包括:

步骤101,获取应用程序运行过程中产生的异常对象。

步骤102,根据该异常对象确定该应用程序对应的原始数据的异常位置。

步骤103,根据该异常位置在该原始数据中添加控制信息。

具体的,若该异常位置包括发生异常的数据行,则可以从该原始数据中查询与该数据行对应的子数据,并在该子数据中添加该控制信息。

在一个例子中,在该子数据中添加该控制信息,可以包括但不限于:在该子数据的前面添加该控制信息;或者,在该子数据的后面添加该控制信息。

步骤104,根据该控制信息输出与该异常位置对应的异常数据。

具体的,在执行与该应用程序对应的原始数据的过程中,若执行到该控制信息,则可以获取与该异常位置对应的异常数据,然后,可以输出该异常数据;其中,该控制信息可以用于指示输出与异常位置对应的异常数据。

在一个例子中,获取与该异常位置对应的异常数据,可以包括但不限于:若该异常位置包括发生异常的数据行,则可以从该原始数据中查询与该数据行对应的子数据,然后,可以获取与该子数据对应的异常数据。

在一个例子中,根据该控制信息输出与该异常位置对应的异常数据,可以包括但不限于:若该异常位置包括发生异常的数据行,则根据该控制信息输出与该异常位置对应的异常数据、该数据行、与该原始数据对应的参数信息。

在上述实施例中,异常对象包括异常日志;异常数据包括局部变量。

在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。

基于上述技术方案,本申请实施例中,可以根据异常对象确定原始数据的异常位置,根据异常位置在原始数据中添加控制信息,根据控制信息输出与异常位置对应的异常数据(即用于分析异常原因的异常数据),这样,维护人员可以直接获知异常数据,并利用异常数据分析异常原因,而不是通过异常日志分析异常原因,能够准确分析异常原因,及时的修复异常问题,减少用户的工作量,用户体验比较好。上述方式能够快速得到异常数据,排查异常发生的详细过程,直接查看真实运行的异常数据,真正反应线上错误的执行过程。

基于与上述方法同样的申请构思,本申请实施例中还提出另一种异常处理方法,参见图2所示,为该方法的流程示意图,该方法可以包括:

步骤201,获取应用程序运行过程中产生的异常日志;其中,该异常日志可以包括该应用程序对应的原始数据中发生异常的数据行。

步骤202,从该原始数据中查询与该数据行对应的子数据,在该子数据中添加控制信息,该控制信息用于指示输出与该子数据对应的局部变量。

在一个例子中,在该子数据中添加控制信息,可以包括但不限于:在该子数据的前面添加该控制信息;或者,在该子数据的后面添加该控制信息。

步骤203,根据该控制信息输出与该子数据对应的局部变量。

具体的,在执行与该应用程序对应的原始数据的过程中,若执行到该控制信息,则可以获取与该子数据对应的局部变量,并输出该局部变量。

在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。

基于上述技术方案,本申请实施例中,可以根据异常对象确定原始数据的异常位置,根据异常位置在原始数据中添加控制信息,根据控制信息输出与异常位置对应的异常数据(即用于分析异常原因的异常数据),这样,维护人员可以直接获知异常数据,并利用异常数据分析异常原因,而不是通过异常日志分析异常原因,能够准确分析异常原因,及时的修复异常问题,减少用户的工作量,用户体验比较好。上述方式能够快速得到异常数据,排查异常发生的详细过程,直接查看真实运行的异常数据,真正反应线上错误的执行过程。

以下结合具体的应用场景,对上述异常处理方法进行进一步的说明。

参见图3所示,为本申请实施例的应用场景示意图。其中,应用客户端可以是终端设备(如智能终端、笔记本电脑、pc(personalcomputer,个人计算机)、手机、平板电脑等,对此不做限制)的浏览器,也可以是终端设备的app(application,应用程序),对此不做限制。应用服务器可以是与应用客户端交互的任意设备,应用服务器可以为应用客户端提供相关服务,对此不做限制。

在一个例子中,应用服务器可以包括用于实现相关服务的应用程序,应用服务器通过应用程序为应用客户端提供相关服务。而且,应用程序是通过软件代码实现的,也就是说,应用服务器通过执行软件代码,能够实现应用程序的功能,继而通过应用程序为应用客户端提供相关服务。综上所述,应用服务器与应用客户端交互的过程,实际上就是执行应用程序的软件代码的过程。

为了方便描述,本申请实施例中,可以将应用程序的软件代码称为原始数据,该原始数据可以包括多行软件代码,每行软件代码称为该原始数据的子数据(即部分原始数据),此外,可以将原始数据的每一行称为数据行。

例如,应用程序对应的原始数据包括100行软件代码,则原始数据的第一行为数据行1,第一行的软件代码为数据行1对应的子数据1,原始数据的第二行为数据行2,第二行的软件代码为数据行2对应的子数据2,以此类推。

基于上述应用场景,本申请实施例提出的异常处理方法,其流程图可以参见图4所示,该方法可以应用于应用服务器,该方法可以包括以下步骤:

步骤401,获取应用程序运行过程中产生的异常日志。

具体的,在应用服务器与应用客户端交互的过程中,应用服务器通过执行应用程序,为应用客户端提供相关服务。在应用程序的运行过程中,若未发生异常,则应用服务器可以产生正常日志,对此过程不再赘述。在应用程序的运行过程中,若发生异常,则应用服务器可以产生异常日志,一旦应用服务器产生异常日志,就可以获取应用程序运行过程中产生的异常日志。

其中,当应用程序的运行过程发生异常时,会产生调用过程的日志(如100行左右),将这个日志称为异常日志,该异常日志用于记录与当前操作有关的信息,如数据处理失败的信息、操作时间信息、异常原因信息、原始数据的异常位置(即发生异常的数据行)等,对此异常日志的内容不做限制。

步骤402,根据异常日志确定原始数据中发生异常的数据行。

具体的,参见上述实施例,由于异常日志包括操作时间信息、异常原因信息、原始数据的异常位置等,因此,可以根据异常日志确定原始数据的异常位置,即原始数据中发生异常的数据行。例如,若异常日志包括的异常位置是28,表示原始数据的第28行发生异常,因此,发生异常的数据行是数据行28。

步骤403,从原始数据中查询与该数据行对应的子数据,并在该子数据中添加控制信息,该控制信息用于指示输出与该子数据对应的局部变量。

具体的,在从原始数据中查询到与该数据行(即原始数据中发生异常的数据行)对应的子数据后,可以在该子数据的前面添加该控制信息(即在原始数据中该子数据的前面添加该控制信息);或者,可以在该子数据的后面添加该控制信息(即在原始数据中该子数据的后面添加该控制信息)。

在一个例子中,可以基于字节码增强功能,在不修改原始数据的基础上,在原始数据中的子数据中添加控制信息。当然,在实际应用中,也可以基于其它功能,在原始数据中的子数据中添加控制信息,对此不做限制。

例如,假设发生异常的数据行是数据行28,则可以从原始数据中查询第28行的子数据28(即原始数据的第28行软件代码),然后,在原始数据的第28行的子数据28中添加控制信息,即在第28行添加控制信息。例如,在子数据28的前面添加该控制信息,或者,在子数据28的后面添加该控制信息。

在一个例子中,可以在应用服务器加载代理客户端(也可以称为目标客户端或对象客户端,后续以代理客户端为例)。基于此,由代理客户端获取应用程序运行过程中产生的异常日志,根据该异常日志确定原始数据中发生异常的数据行,从该原始数据中查询与该数据行对应的子数据,并在该子数据中添加控制信息,该控制信息用于指示输出与该子数据对应的局部变量。

在另一个例子中,可以在应用服务器加载代理客户端(也可以称为目标客户端或对象客户端,后续以代理客户端为例)和监控客户端(如eagleeye或者apm等,用于发现应用程序本身的异常日志)。基于此,由监控客户端获取应用程序运行过程中产生的异常日志,并将该异常日志输出给代理客户端。代理客户端在接收到该异常日志后,根据该异常日志确定原始数据中发生异常的数据行,从该原始数据中查询与该数据行对应的子数据,并在该子数据中添加控制信息,该控制信息用于指示输出与该子数据对应的局部变量。

步骤404,在执行与该应用程序对应的原始数据的过程中,若执行到子数据中的控制信息,则获取与该子数据对应的局部变量,并输出该局部变量。

具体的,在应用服务器与应用客户端交互的过程中,应用服务器通过执行应用程序,为应用客户端提供相关服务。在应用程序的运行过程中,应用服务器会执行与该应用程序对应的原始数据,如执行原始数据第1行的子数据1,第2行的子数据2等,对此不做限制。在执行原始数据第28行的子数据28时,由于子数据28包括控制信息,且控制信息指示输出与子数据28对应的局部变量,因此,应用服务器会获取子数据28对应的局部变量,并输出该局部变量。

其中,在执行原始数据第28行的子数据28时,堆栈中存储的就是子数据28对应的局部变量,因此,可以从堆栈中获取子数据28对应的局部变量。

其中,局部变量是应用程序运行过程中的过程参数,是只在特定过程或函数中可以访问的变量,局部变量作用域是定义局部变量的子程序(即原始数据的子数据)。例如,通过局部变量,可以确定国家、地区、用户标识等内容。

参见图5所示,为局部变量的示意图,从该局部变量可以看出,应用程序(即app)的名称是“aaa”,用户标识(即name)是“zhangsan”,国家(即country)是“china”,地区(即region)是“hangzhou”。当然,图5只是局部变量的一个示例,对此局部变量的形式不做限制,只要能够包括相关信息即可。

在一个例子中,可以只输出局部变量(如子数据28对应的局部变量)。或者,可以输出局部变量、原始数据中发生异常的数据行(如数据行28)、与原始数据对应的参数信息(如类名、方法名、原始数据的总行数等)。

其中,在执行原始数据第28行的子数据28时,堆栈中也可以存储原始数据对应的参数信息,因此,可以从堆栈中获取原始数据对应的参数信息。

为了方便描述,后续以输出局部变量为例,对于输出局部变量、发生异常的数据行、参数信息的实现方式,与输出局部变量类似,后续不再赘述。

在一个例子中,控制信息用于指示将局部变量输出给用户,基于此,应用服务器在获取到局部变量后,可以将局部变量输出给用户,这样,用户可以获取到局部变量,继而利用该局部变量分析异常原因,对此过程不再赘述。

在另一个例子中,控制信息用于指示将局部变量输出给控制服务器(如向应用服务器提供代理客户端的服务器),如控制信息可以包括控制服务器的地址。基于此,应用服务器在获取到局部变量后,可以将局部变量输出给控制服务器,例如,利用控制服务器的地址将局部变量输出给控制服务器。控制服务器在接收到局部变量后,可以将局部变量输出给用户,这样,用户可以获取到局部变量,继而利用该局部变量分析异常原因,对此过程不再赘述。

在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。

基于上述技术方案,本申请实施例中,提出一种基于异常日志的局部变量获取方法,维护人员可以获知局部变量,利用局部变量分析异常原因,而不是通过异常日志分析异常原因,能够准确分析异常原因,及时修复异常问题,减少用户工作量,用户体验比较好。上述方式能够快速得到局部变量,排查异常发生的详细过程,直接查看线上真实运行的局部变量,真正反应线上错误的执行过程,能够模拟线上环境的真实异常发生时的用户输入。当异常发生时,基于异常日志,快速查看异常发生时的局部变量,结合源代码,真正的还原现场。

由于应用程序的异常是有限的,即发生异常的次数比较小,因此,只在应用程序发生异常时,才获取局部变量,在应用程序未发生异常时,不获取局部变量,可以减少局部变量的获取次数,是一种按需获取局部变量的方式。

基于与上述方法同样的申请构思,本申请实施例还提供一种异常处理装置,如图6所示,为所述异常处理装置的结构图,所述装置可以包括:

获取模块61,用于获取应用程序运行过程中产生的异常对象;

确定模块62,用于根据所述异常对象确定所述应用程序对应的原始数据的异常位置;

添加模块63,用于根据所述异常位置在所述原始数据中添加控制信息;

输出模块64,用于根据所述控制信息输出与所述异常位置对应的异常数据。

所述添加模块63根据所述异常位置在所述原始数据中添加控制信息时具体用于:若所述异常位置包括发生异常的数据行,则从所述原始数据中查询与所述数据行对应的子数据,并在所述子数据中添加所述控制信息。

所述输出模块64根据所述控制信息输出与所述异常位置对应的异常数据时具体用于:在执行与所述应用程序对应的原始数据的过程中,若执行到所述控制信息,则获取与所述异常位置对应的异常数据,并输出所述异常数据;

其中,所述控制信息用于指示输出与异常位置对应的异常数据。

基于上述技术方案,本申请实施例中,提出一种基于异常日志的局部变量获取方法,维护人员可以获知局部变量,利用局部变量分析异常原因,而不是通过异常日志分析异常原因,能够准确分析异常原因,及时修复异常问题,减少用户工作量,用户体验比较好。上述方式能够快速得到局部变量,排查异常发生的详细过程,直接查看线上真实运行的局部变量,真正反应线上错误的执行过程,能够模拟线上环境的真实异常发生时的用户输入。当异常发生时,基于异常日志,快速查看异常发生时的局部变量,结合源代码,真正的还原现场。

基于与上述方法同样的申请构思,本申请实施例还提供一种异常处理设备,包括:处理器和机器可读存储介质;其中,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:

获取应用程序运行过程中产生的异常对象;

根据所述异常对象确定所述应用程序对应的原始数据的异常位置;

根据所述异常位置在所述原始数据中添加控制信息;

根据所述控制信息输出与所述异常位置对应的异常数据。

本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被执行时进行如下处理:

获取应用程序运行过程中产生的异常对象;

根据所述异常对象确定所述应用程序对应的原始数据的异常位置;

根据所述异常位置在所述原始数据中添加控制信息;

根据所述控制信息输出与所述异常位置对应的异常数据。

参见图7所示,为本申请实施例中提出的异常处理设备的结构图,所述异常处理设备70可以包括:处理器71,网络接口72,总线73,存储器74。

存储器74可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据等等。例如,存储器74可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等)。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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