线程状态监控方法、装置、计算机设备和存储介质与流程

文档序号:17262832发布日期:2019-03-30 09:47阅读:111来源:国知局
线程状态监控方法、装置、计算机设备和存储介质与流程

本发明涉及计算机技术领域,特别是涉及一种线程状态监控方法、装置、计算机设备和存储介质。



背景技术:

计算机在运行应用程序的过程中,当应用程序出现长时间卡顿时,就需要对其运行状态进行分析。一般都是分析该应用程序运行时产生的线程堆栈,然后在线程堆栈中找到具体是哪个线程上的方法(方法也可以称为功能)出现问题,从而对该线程的方法进行优化,使得应用程序运行正常。

传统技术中,在应用程序运行过程中,一般都是先登录并运行java所在的应用服务器,之后运行jvm(java虚拟机)的jstack(堆栈跟踪工具)命令,得到该应用程序的线程堆栈,然后对该应用程序的线程堆栈信息进行分析,并定位出具体是哪个线程出现问题,从而对该线程的所有方法进行优化,使应用程序运行正常。

但是上述方法无法定位出具体是线程的哪个方法出现了问题,从而无法准确优化线程上的方法。



技术实现要素:

基于此,有必要针对上述传统技术无法定位出具体是线程的哪个方法出现了问题,从而无法准确优化线程上的方法问题,提供一种线程状态监控方法、装置、计算机设备和存储介质。

一种线程状态监控方法,包括:

获取应用运行过程中产生的线程堆栈;

根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息;

根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

在其中一个实施例中,所述方法状态信息包括所述方法的标识、所述方法的开始运行时间。

在其中一个实施例中,所述方法状态信息还包括所述方法的非时间参数信息,所述非时间参数信息包括所执行的数据库脚本、所述方法对应的请求地址参数中的至少一个。

在其中一个实施例中,所述根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态,包括:

获取当前系统运行时间;

根据所述当前系统运行时间和每个方法状态栈中各个方法的开始运行时间,确定每个线程上各个方法的持续运行时长;

根据每个线程上各个方法的持续运行时长和预设的时长的比较结果,确定每个线程上各个方法的方法状态。

在其中一个实施例中,所述获取应用运行过程中产生的线程堆栈之前,还包括:

获取应用运行的当前线程的标识;

根据所述当前线程的标识判断当前的全局线程状态表中是否存在所述当前线程标识对应的方法状态栈;

若否,则根据所述当前线程上的各个方法,在当前的全局线程状态表中创建所述当前线程对应的方法状态栈。

在其中一个实施例中,所述根据所述当前线程上的各个方法,在当前的全局线程状态表中创建所述当前线程对应的方法状态栈,包括:

在当前的全局线程状态表中按照预设规则创建一个空栈;

获取所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息;

将所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息添加至所述空栈中,形成所述当前线程对应的方法状态栈。

在其中一个实施例中,所述线程状态监控方法还包括:

若各个线程上的方法执行返回操作时,从所述全局线程状态表中删除所述方法对应的方法状态信息。

在其中一个实施例中,所述线程状态监控方法还包括:

对所述线程上各个方法的方法状态信息的格式进行格式化,并将所述格式化后的方法状态信息输出至web页面上。

一种线程状态监控装置,包括:

第一获取模块,用于获取应用运行过程中产生的线程堆栈;

第二获取模块,用于根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息;

确定模块,用于根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

一种计算机设备,包括:存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:

获取应用运行过程中产生的线程堆栈;

根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息;

根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:

获取应用运行过程中产生的线程堆栈;

根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息;

根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

上述线程状态监控方法,计算机设备首先是获取应用在运行过程中产生的线程堆栈,然后根据线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,该方法状态栈中包括线程上各个方法的方法状态信息,最后根据每个方法状态栈中的方法状态信息来确定每个线程上的方法状态,是运行卡顿还是运行流畅。利用本实施例的方法,可以查看应用的每个线程上具体执行的每个方法的方法状态信息,从而可以根据该状态信息,准确地得到哪个线程上的哪个方法出现了问题,进而对该出现问题的方法的性能进行优化;同时,其可以避免盲目地对线程上的所有方法的性能进行优化,从而提高了计算机设备对线程的方法性能进行优化的效率。

附图说明

图1为一个实施例中线程状态监控方法的应用环境图;

图2为一个实施例提供的线程状态监控方法的流程示意图;

图3为一个实施例提供的线程状态监控方法的流程示意图;

图4为一个实施例提供的线程状态监控方法的流程示意图;

图5为一个实施例提供的线程状态监控方法的流程示意图;

图6为一个实施例提供的线程状态监控装置的结构示意图;

图7为一个实施例提供的线程状态监控装置的结构示意图;

图8为一个实施例提供的线程状态监控装置的结构示意图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本发明实施例提供的线程状态监控方法,可以适用于图1所示的计算机设备。如图1所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的计算机通过网络连接通信。该计算机程序被处理器执行时以实现一种线程状态监控方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

需要说明的是,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在介绍具体的实施例之前,这里对本发明实施例中涉及的专业术语或者概念进行解释说明:

线程堆栈:当前时刻应用程序的线程快照,线程快照是当前java虚拟机内应用程序运行时,每一条线程正在执行的方法堆栈的集合。

传统技术中,应用程序在运行过程中出现长时间卡顿时,计算机设备运行jvm的jstack命令可以得到应用程序的线程堆栈,然后通过对该应用程序的线程堆栈信息进行分析,并定位出具体是哪个线程出现问题,从而对该线程的所有方法进行优化,使应用程序运行正常。但是由于上述方法无法具体定位出具体是线程的哪个方法出现了问题,从而也就无法准确优化线程上的方法,导致优化效率低。本发明实施例提供的线程状态监控方法、装置、计算机设备和存储介质,旨在解决传统技术的如上技术问题。

需要说明的是,下述方法实施例的执行主体可以是线程状态监控装置,该线程状态监控装置可以通过软件、硬件或者软硬件结合的方式实现成为上述计算机设备的部分或者全部。下述方法实施例以执行主体是计算机设备为例进行说明。

图2为一个实施例提供的线程状态监控方法的流程示意图。本实施例涉及的是计算机设备如何对应用运行过程中产生的线程上的方法状态进行监控的具体过程。如图2所示,该方法可以包括以下步骤:

s201,获取应用运行过程中产生的线程堆栈。

具体的,应用在计算机设备上开始运行之后,会产生线程;可选的,应用运行时产生的线程可以是一个,也可以是多个;上述产生的每个线程上有其对应的方法,可选的,每个线程上对应的方法可以是一个,也可以是多个;上述线程上的方法的集合构成了线程堆栈。可选的,计算机设备可以利用jstack命令来得到上述线程堆栈;可选的,计算机设备可以是在应用运行过程中出现卡顿时获取上述线程堆栈,还可以是在应用运行流畅时获取上述线程堆栈,本实施例对此不做限定。

s202,根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息。

具体的,该预设的全局状态表中可以包括每个线程的标识和每个线程对应的方法状态栈,该方法状态栈包括该线程上各个方法的方法状态信息。可选的,在计算机设备需要查看线程堆栈的信息时,计算机设备可以是根据线程标识,在全局线程状态表里面遍历所有线程,得到所有线程对应的方法状态栈。另外,上述各个方法中的方法也可以称为功能,例如,一个线程上可以执行的功能,可以是调用某个函数,还可以是访问某个地址等。

s203,根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

具体的,在全局线程状态表里面,每个线程具有对应的方法状态栈,每个方法状态栈上具有该线程上的各个方法的方法状态信息;可选的,该方法状态信息可以包括上述每个线程上的方法的标识、上述方法的开始运行时间,以使用户可以方便地在全局线程状态表的方法状态栈中查看对应的方法的状态信息,进而利用方法的开始运行时间来表征方法的运行状态。可选的,上述方法状态信息还可以包括上述方法的非时间参数信息,上述非时间参数信息包括所执行的数据库脚本、上述方法对应的请求地址参数中的至少一个,这样可以使得计算机设备在对每个线程上的方法进行监控时,能得到关于当前线程上各个方法的更全面的信息,从而可以使计算机设备对方法的运行状态有一个更准确的分析结果。可选的,该非时间参数还可以是其他参数,本实施例对此不做限定。计算机设备在得到每个线程上对应的方法状态栈中的方法状态信息之后,就可以根据该方法状态信息来判断每个线程上的方法状态,是运行卡顿还是运行流畅。

由上述描述可知,本实施例提供的线程状态监控方法,当应用的运行状态出现问题时,是利用预设的全局线程状态表上的方法状态栈中的方法状态信息,来对线程上的方法的状态来进行判断的,从而定位出具体是哪个线程的方法出现了问题,其不同于传统技术中盲目地对线程上所有的方法的性能进行优化的方法;因此,利用本实施例提供的线程状态监控方法,在应用的运行状态出现问题时,可以看到应用的每个线程上具体执行的每个方法的方法状态信息,从而可以根据该状态信息,准确定位出具体是哪个线程上的哪个方法出现了问题,进而可以有针对性的对该出现问题的方法的性能进行优化;同时,其可以避免盲目地对线程上的所有方法的性能进行优化,从而提高了计算机设备对线程的方法性能进行优化的效率。

本实施例提供的线程状态监控方法,计算机设备首先是获取应用在运行过程中产生的线程堆栈,然后根据线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈。由于方法状态栈中包括线程上各个方法的方法状态信息,因此可以根据每个方法状态栈中的方法状态信息来确定每个线程上的方法状态,是运行卡顿还是运行流畅,故而本实施例的方法可以准确地得到哪个线程上的哪个方法出现了问题,进而对该出现问题的方法的性能进行优化;同时,其可以避免盲目地对线程上的所有方法的性能进行优化,从而提高了计算机设备对线程的方法性能进行优化的效率。

图3为一个实施例提供的线程状态监控方法的流程示意图。本实施例涉及的是计算机设备如何根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态的具体过程。在上述实施例的基础上,请参见图3,上述s203包括以下步骤:

s301,获取当前系统运行时间。

s302,根据所述当前系统运行时间和每个方法状态栈中各个方法的开始运行时间,确定每个线程上各个方法的持续运行时长。

具体的,计算机设备在得到当前系统的运行时间和每个方法状态栈中各个方法的开始运行时间之后,可选的,计算机设备可以将当前系统时间和每个方法状态栈中各个方法的开始运行时间作差值,从而就可以得到每个线程上各个方法的持续运行时长。

s303,根据每个线程上各个方法的持续运行时长和预设的时长的比较结果,确定每个线程上各个方法的方法状态。

具体的,计算机设备在得到上述每个线程上各个方法的持续运行时长之后,可以将该时长与预设的时长进行比较,从而可以得到一个比较结果。可选的,该比较可以是将各个方法的持续运行时长与预设的时长作差值,根据差值来得到一个比较结果;当上述比较结果为上述各个方法的持续运行时长大于预设的时长时,则计算机设备可以确定该方法的方法状态为运行卡顿;当比较结果为上述各个方法的持续运行时长不大于预设的时长时,则计算机设备可以确定该方法的方法状态为运行流畅。可选的,上述比较还可以是将各个方法的持续运行时长与预设的时长作比值之后,然后将该比值与1进行比较,得到一个比较结果。当比较结果为上述比值大于1时,则计算机设备可以确定该方法的方法状态为运行卡顿;当比较结果为上述比值不大于1时,则计算机设备可以确定该方法的方法状态为运行流畅。

本实施例提供的线程状态监控方法,计算机设备先是获取当前系统运行时间,然后根据当前系统运行时间和每个方法状态栈中各个方法的开始运行时间,计算机设备就可以确定出每个线程上各个方法的持续运行时长,最后将计算机设备该运行时长和预设的时长进行对比,根据对比结果确定出每个线程上各个方法的方法状态。因此,利用本实施例的方法,可以清楚且准确地看到每个线程上各个方法的运行时间,从而得到各个方法的持续运行时长;同时,利用各个方法的持续运行时间和预设的时长作对比,可以较为简单和准确地确定出每个线程上各个方法的方法状态,从而根据该方法状态可以快速地确定出是哪个线程上的哪个方法出现了问题,进而快速而准确地对该出现问题的方法的性能进行优化。

图4为一个实施例提供的线程状态监控方法的流程示意图。本实施例涉及的是计算机设备如何创建全局线程状态表中的方法状态栈的具体过程。在上述实施例的基础上,请参见图4,上述方法还包括以下步骤:

s401,获取应用运行的当前线程的标识。

具体的,计算机设备的应用在运行时,会产生线程,每个线程可以有一个对应的标识,应用在运行过程中,计算机设备可以得到当前线程对应的标识。

s402,根据所述当前线程的标识判断当前的全局线程状态表中是否存在所述当前线程标识对应的方法状态栈。若是,则执行s403,若否,则执行s404。

具体的,当计算机设备开始运行时,可以创建一个空的全局线程状态表。当计算机设备在得到当前线程的标识之后,可以在当前的全局线程状态表中去查找,看当前的全局线程状态表中是否有与该当前线程标识匹配的线程标识和对应的方法状态栈。

s403,根据当前线程标识对应的方法状态栈中的方法状态信息确定当前线程上各个方法的方法状态。

s404,根据所述当前线程上的各个方法,在当前的全局线程状态表中创建所述当前线程对应的方法状态栈。

在该步骤中,计算机设备判断若当前的全局线程状态表中不存在与该当前线程标识匹配的线程标识和对应的方法状态栈,则根据当前线程标识和当前线程上的各个方法,在当前的全局线程状态表中创建一个当前线程标识和对应的方法状态栈。可选的,图5为一个实施例提供的线程状态监控方法的流程示意图。该方法状态栈的创建方式可以包括如图5所示的如下步骤:

s501,在当前的全局线程状态表中按照预设规则创建一个空栈。

具体的,计算机设备在全局线程状态表中创建当前线程对应的方法状态栈时,可以根据当前线程的标识,在当前全局线程状态字中创建一个当前线程对应的方法状态栈,该方法状态栈可以为空栈,即里面不含有当前线程对应的方法的方法状态信息。

s502,获取所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息。

具体的,在上述方法状态栈的空栈创建完成之后,计算机设备可以根据上述应用运行过程中产生的线程堆栈信息得到当前方法的状态信息,该方法状态信息可以是当前线程上对应的各个方法的标识、当前线程上各个方法的开始运行时间、当前线程上各个方法的非时间参数信息;可选的,上述各个方法的标识可以是数字,还可以是字母等,本实施例对此不做限定;可选的,上述各个方法的非时间参数信息可以是一个,还可以是多个,本实施例对此也不做限定。

s503,将所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息添加至所述空栈中,形成所述当前线程对应的方法状态栈。

具体的,计算机设备在得到上述当前线程上的方法状态信息,即对应的各个方法的标识、当前线程上各个方法的开始运行时间、当前线程上各个方法的非时间参数信息之后,可以将上述方法状态信息存放在上述创建的空的方法状态栈中,形成包括方法状态信息的当前线程对应的方法状态栈。可选的,计算机设备还可以对上述应用运行过程产生的线程上的指定方法加标签,并获取该标签对应的方法的方法状态信息,并将该方法对应的方法状态信息放入当前线程对应的方法状态栈中,用以有针对性的对线程上的指定方法进行监控,从而可以避免计算机设备盲目地查找线程上出现问题的方法,准确快速地找到出现问题的方法,提高查找线程上出现问题的方法的效率。

由此可知,计算机设备的应用在运行过程中,产生的线程的方法状态栈是不断的存入全局线程状态表中的。

可选的,上述方法还可以包括:若各个线程上的方法执行返回操作时,从所述全局线程状态表中删除所述方法对应的方法状态信息。

在该可选的实施方式中,当应用运行结束时,即当各个线程上的方法执行返回操作时,计算机设备可以从上述全局线程状态表中删除该方法的标识、该方法的开始运行时间、该方法的非时间参数;可选的,上述返回可以是方法运行结束时的正常返回,还可以是方法运行过程中和/或运行结束时的异常返回。利用该方法,一方面可以降低全局线程状态表中的内存占用损耗,另一方面可以使计算机设备根据剩余的线程上的方法状态信息,从而快速且准确地定位出是哪个线程的哪个方法出现了问题,并对该出现问题的方法的性能进行优化。

可选的,上述方法还可以包括:对所述线程上各个方法的方法状态信息的格式进行格式化,并将所述格式化后的方法状态信息输出至web页面上。在该可选的实施方式中,上述计算机设备对方法状态信息的格式进行格式化,可以是对方法状态信息的某一个信息进行格式化,还可以是对方法状态信息的所有信息进行格式化,本实施例对此不做限定。利用该方法,计算机设备可以输出特定格式的方法状态信息,便于用户查看;另外,计算机设备将该方法状态信息输出至web界面,可以使用户直观且方便地查看每个线程上各个方法的状态信息,从而可以使用户快速且准确地定位出是哪个线程的哪个方法出现了问题,并对该出现问题的方法的性能进行优化。

本实施例提供的线程状态监控方法,计算机设备在获取应用运行过程中产生的线程堆栈之前,首先获取应用运行的当前线程的标识,然后根据当前线程的标识判断当前的全局线程状态表中是否存在当前线程标识对应的方法状态栈,利用线程标识的判断方法,计算机设备可以准确且快速地确定出全局线程状态表中是否存在有当前线程标识对应的方法状态栈;如果当前的全局线程状态表中不存在与该当前线程标识匹配的线程标识和对应的方法状态栈,则计算机设备根据当前线程标识和当前线程上的各个方法,在全局线程状态表中创建一个空栈,并将得到的当前线程上各个方法的标识、当前线程上各个方法的开始运行时间、当前线程上各个方法的非时间参数信息,存放至上述空栈中,形成含有方法状态信息的当前线程对应的方法状态栈。从而使得计算机设备可以监控应用运行过程中产生的所有线程各个方法具体的方法状态信息,进而根据该具体的方法状态信息来准确地定位出是哪个线程的哪个方法出现了问题,并有针对性的对该出现问题的方法的性能进行优化。

应该理解的是,虽然图2-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

图6为一个实施例提供的线程状态监控装置的结构示意图。如图6所示,该装置可以包括:第一获取模块10、第二获取模块11、确定模块12。

具体的,第一获取模块10,用于获取应用运行过程中产生的线程堆栈;

第二获取模块11,用于根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息;

确定模块12,用于根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

在一个实施例中,所述方法状态信息包括所述方法的标识、所述方法的开始运行时间。

在一个实施例中,所述方法状态信息还包括所述方法的非时间参数信息,所述非时间参数信息包括所执行的数据库脚本、所述方法对应的请求地址参数中的至少一个。

本实施例提供的线程状态监控装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

图7为一个实施例提供的线程状态监控装置的结构示意图。在上述实施例的基础上,如图7所示,上述确定模块12包括:第一获取单元121、第一确定单元122、第二确定单元123。

具体的,第一获取单元121用于获取当前系统运行时间;

第一确定单元122,用于根据所述当前系统运行时间和每个方法状态栈中各个方法的开始运行时间,确定每个线程上各个方法的持续运行时长;

第二确定单元123,用于根据每个线程上各个方法的持续运行时长和预设的时长的比较结果,确定每个线程上各个方法的方法状态。

图8为一个实施例提供的线程状态监控装置的结构示意图。在上述实施例的基础上,如图8所示,在所述获取应用运行过程中产生的线程堆栈之前,上述装置还包括:第三获取模块13、判断模块14、创建模块15。

具体的,第三获取模块13,用于获取应用运行的当前线程的标识;

判断模块14,用于根据所述当前线程的标识判断当前的全局线程状态表中是否存在所述当前线程标识对应的方法状态栈;

创建模块15,用于若当前的全局线程状态表中不存在所述当前线程标识对应的方法状态栈,则根据所述当前线程上的各个方法,在当前的全局线程状态表中创建所述当前线程对应的方法状态栈。

在上述实施例的基础上,继续参见图8,上述创建模块15包括:创建单元151、第二获取单元152、添加单元153。

具体的,创建单元151用于在当前的全局线程状态表中按照预设规则创建一个空栈;

第二获取单元152,用于获取所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息;

添加单元153,用于将所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息添加至所述空栈中,形成所述当前线程对应的方法状态栈。

在上述实施例的基础上,继续参见图8,上述装置还包括:删除模块16。

具体的,删除模块16,用于若各个线程上的方法执行返回操作时,从所述全局线程状态表中删除所述方法对应的方法状态信息。

在上述实施例的基础上,继续参见图8,上述装置还包括:输出模块17。

输出模块17,用于对所述线程上各个方法的方法状态信息的格式进行格式化,并将所述格式化后的方法状态信息输出至web页面上。

本实施例提供的线程状态监控装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

在一个实施例中,提供了一种计算机设备,包括:存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取应用运行过程中产生的线程堆栈;

根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息;

根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

在一个实施例中,所述方法状态信息包括所述方法的标识、所述方法的开始运行时间。

在一个实施例中,所述方法状态信息还包括所述方法的非时间参数信息,所述非时间参数信息包括所执行的数据库脚本、所述方法对应的请求地址参数中的至少一个。

在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:

获取当前系统运行时间;

根据所述当前系统运行时间和每个方法状态栈中各个方法的开始运行时间,确定每个线程上各个方法的持续运行时长;

根据每个线程上各个方法的持续运行时长和预设的时长的比较结果,确定每个线程上各个方法的方法状态。

在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:

获取应用运行的当前线程的标识;

根据所述当前线程的标识判断当前的全局线程状态表中是否存在所述当前线程标识对应的方法状态栈;

若否,则根据所述当前线程上的各个方法,在当前的全局线程状态表中创建所述当前线程对应的方法状态栈。

在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:

在当前的全局线程状态表中按照预设规则创建一个空栈;

获取所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息;

将所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息添加至所述空栈中,形成所述当前线程对应的方法状态栈。

在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:

若各个线程上的方法执行返回操作时,从所述全局线程状态表中删除所述方法对应的方法状态信息。

在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:

对所述线程上各个方法的方法状态信息的格式进行格式化,并将所述格式化后的方法状态信息输出至web页面上。

在一个实施例中,提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

获取应用运行过程中产生的线程堆栈;

根据所述线程堆栈中的每个线程,从预设的全局线程状态表中获取每个线程对应的方法状态栈,所述方法状态栈包括所述线程上各个方法的方法状态信息;

根据每个方法状态栈中的方法状态信息确定每个线程上的方法状态;其中,所述方法状态包括方法运行卡顿、方法运行流畅。

在一个实施例中,所述方法状态信息包括所述方法的标识、所述方法的开始运行时间。

在一个实施例中,所述方法状态信息还包括所述方法的非时间参数信息,所述非时间参数信息包括所执行的数据库脚本、所述方法对应的请求地址参数中的至少一个。

在一个实施例中,所述计算机程序被处理器执行时还实现以下步骤:

获取当前系统运行时间;

根据所述当前系统运行时间和每个方法状态栈中各个方法的开始运行时间,确定每个线程上各个方法的持续运行时长;

根据每个线程上各个方法的持续运行时长和预设的时长的比较结果,确定每个线程上各个方法的方法状态。

在一个实施例中,所述计算机程序被处理器执行时还实现以下步骤:

获取应用运行的当前线程的标识;

根据所述当前线程的标识判断当前的全局线程状态表中是否存在所述当前线程标识对应的方法状态栈;

若否,则根据所述当前线程上的各个方法,在当前的全局线程状态表中创建所述当前线程对应的方法状态栈。

在一个实施例中,所述计算机程序被处理器执行时还实现以下步骤:

在当前的全局线程状态表中按照预设规则创建一个空栈;

获取所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息;

将所述当前线程上各个方法的标识、所述当前线程上各个方法的开始运行时间、所述当前线程上各个方法的非时间参数信息添加至所述空栈中,形成所述当前线程对应的方法状态栈。

在一个实施例中,所述计算机程序被处理器执行时还实现以下步骤:

若各个线程上的方法执行返回操作时,从所述全局线程状态表中删除所述方法对应的方法状态信息。

在一个实施例中,所述计算机程序被处理器执行时还实现以下步骤:

对所述线程上各个方法的方法状态信息的格式进行格式化,并将所述格式化后的方法状态信息输出至web页面上。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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