卡顿监控方法、装置、系统、存储介质和计算机设备与流程

文档序号:21407948发布日期:2020-07-07 14:42阅读:197来源:国知局
卡顿监控方法、装置、系统、存储介质和计算机设备与流程

本发明涉及app监控技术领域,具体而言,本发明涉及一种卡顿监控方法、装置、系统、计算机可读存储介质和计算机设备。



背景技术:

随着移动互联网的蓬勃发展,移动终端app成为人们工作、生活、娱乐的重要工具。决定一款app是否受用户欢迎的因素很多,其中,app是否具有良好的性能是影响因素之一。对于用户可感知的性能指标来说,一个是重要的性能指标就是app在使用过程中是否卡顿。对此,当app外发后,开发者对app进行卡顿监控是app生命周期中重要的一个环节。

目前,进行卡顿监控技术主要有两种。第一种是通过计算屏幕刷新的帧率(fps),通过计算到的帧率和理想帧率(60fps)进行比较来评估当前页面的流程程度;第二种是利用系统的runloop机制,通过监控主线程的runloop在不同状态间几个状态的执行时间来判断主线程是否阻塞在了某个长时间执行的任务上。但是这两种方案都有明显的缺点,第一种方法根据fps来判断主线程的阻塞状况,会有较大的误差,判断卡顿状况不准确;第二种方法通过对主线程的runloop进行监控,侵入性很强,对主线程本身的性能影响较大,并不适合在线上用户大规模使用。因此,亟需一种可实现准确卡顿监控,而且对主线程无侵入性,对app本身运行影响小的卡顿监控方法。



技术实现要素:

为至少能解决上述的技术缺陷之一,本发明提供了以下技术方案的卡顿监控方法、装置、系统、存储介质和计算机设备。

本发明的实施例根据第一个方面,提供了一种卡顿监控方法,包括如下步骤:

监控线程向主线程发送预置任务;

确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务;

若所述主线程未执行所述预置任务,确定所述主线程发生卡顿;

获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

在一个实施例中,所述确定达到预置时间间隔之后,还包括:

重复所述监控线程向主线程发送预置任务的步骤。

在一个实施例中,所述获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器,包括:

读取预置的所述主线程的卡顿标志位;

若所述卡顿标志位为卡顿状态值,维持所述卡顿状态值;

若所述卡顿标志位为非卡顿状态值,将所述卡顿标志位从非卡顿状态值切换为卡顿状态值,获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

在一个实施例中,所述确定所述主线程发生卡顿,包括:

获取所述主线程当前的cpu占用率;

判断所述cpu占用率是否大于预置阈值;

若是,确定所述主线程发生卡顿。

在一个实施例中,所述监控线程向主线程发送预置任务,包括:

监控线程对初始值为零的预置整体变量执行加一操作;

监控线程向主线程发送命令所述主线程对所述预置整体变量执行减一操作的预置任务;

所述确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务,包括:

确定达到预置时间间隔,所述监控线程读取当前的预置整体变量;

根据所述当前的预置整体变量,判断所述主线程是否已执行对所述预置整体变量执行减一操作的预置任务。

在一个实施例中,所述获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器,包括:

定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器。

本发明的实施例根据第二个方面,提供了另一种卡顿监控方法,包括如下步骤:

客户端监控线程向主线程发送预置任务;确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务;若所述主线程未执行所述预置任务,确定所述主线程发生卡顿;获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器;

所述服务器接收所述客户端上报的所述卡顿堆栈信息;对所述卡顿堆栈信息进行聚类分析,得到卡顿点。

本发明的实施例根据第三个方面,提供了一种卡顿监控装置,包括:

任务发送模块,用于监控线程向主线程发送预置任务;

判断模块,用于确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务;

卡顿确定模块,用于若所述主线程未执行所述预置任务,确定所述主线程发生卡顿;

堆栈上报模块,用于获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

本发明的实施例根据第四个方面,提供了一种卡顿监控系统,所述卡顿监控系统包括客户端和服务器;其中,

所述客户端用于监控线程向主线程发送预置任务;确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务;若所述主线程未执行所述预置任务,确定所述主线程发生卡顿;获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器;

所述服务器用于接收客户端上报的所述卡顿堆栈信息;对所述卡顿堆栈信息进行聚类分析,得到所述主线程的卡顿点。

本发明的实施例根据第五个方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的卡顿监控方法。

本发明的实施例根据第六个方面,提供了一种计算机设备,所述计算机包括一个或多个处理器;存储器;一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个计算机程序配置用于:执行上述的卡顿监控方法。

本发明与现有技术相比,具有以下有益效果:

本发明提供的卡顿监控方法、装置、系统、计算机可读存储介质和计算机设备,通过单独的监控线程向主线程发送任务,以及检查任务是否被主线程执行的方式检测主线程当前的卡顿状况,并在主线程发送卡顿时上报一定时间区间内的卡顿堆栈信息以辅助定位卡顿,该方法对主线程无侵入性,对app本身运行影响小,可有效提高卡顿监控的准确性,同时为服务器提供丰富的卡顿信息,为提高卡顿定位的准确性提供有力的技术支持。

此外,还通过引入预置整体变量,并在主线程和监控线程分别对所述预置整体变量进行加减读写操作,通过提供简单的预置任务进一步减少卡顿监控对主线程性能的影响,且可有效避免多线程操作引发的问题,进一步保证卡顿监控的安全性。

此外,通过设置卡顿标志位并根据发生卡顿时卡顿标志位的值确定是否上报服务器,可有效避免将对应同一卡顿点的卡顿堆栈信息重复上报服务器,减少了用户客户端及服务器的冗余工作量。

此外,通过在所述主线程未执行所述预置任务时进一步根据cpu占用率确定所述主线程是否发生卡顿,可进一步提高卡顿监控的准确性。

此外,还通过定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器,可为服务器后续分析卡顿点和解决卡顿问题提供丰富的信息,为提高卡顿定位的准确性提供有力的技术支持。

本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1为本发明实施例提供的一种卡顿监控方法的方法流程图;

图2为本发明实施例提供的一种持续卡顿监控的过程示意图;

图3为本发明实施例提供的另一种卡顿监控方法的方法流程图;

图4为本发明实施例提供的又一种卡顿监控方法的方法流程图;

图5为本发明实施例提供的一种聚类分析的效果图;

图6为本发明实施例提供的卡顿监控装置的结构示意图;

图7为本发明实施例提供的卡顿监控系统的结构示意图;

图8为本发明实施例提供的计算机设备的结构示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

本发明实施例提供了一种卡顿监控方法,应用于用户客户端,如图1所示,该方法包括:

步骤s110:监控线程向主线程发送预置任务。

当一个app启动时,与此同时会有一个线程立刻运行,该线程通常被称为该app的主线程。在用户使用app的应用场景中,负责对app内用户操作进行响应的是主线程。

主线程的运行可比作一条生产流水线,操作系统将一个个待执行的任务扔到主线程,犹如把任务放到了一条流水线,所有任务按顺序被流水线传输到cpu进行处理。如果每个任务都能很快执行完毕,那么这条流水线就会运行的很顺畅,每个被放置到流水线的任务都能很快得到执行,则不会给用户造成卡顿体验。反而言之,若某个任务(例如文件操作、网络传输等耗时任务)执行时间特别长,就会导致后面的任务需要在流水线上等待,直到前面的耗时任务执行完毕,后续的任务才有机会执行,即主线程被个别执行时间特别长的任务阻塞,若用户此时还进行界面的操作,例如点击控件或滑动列表等,就会有更新界面的任务被扔到主线程的流水线执行,由于此时流水线被耗时任务阻塞,更新界面的任务被迫等待,从而导致用户的界面更新请求得不到及时响应,给用户造成可感知的界面更新不流畅的卡顿体验。

对于本实施例,所述主线程所属的app为当前卡顿监控的目标app。

例如,所述主线程可以是启动bigolive直播app、like短视频app、hello语音交友app等app对应的主线程,以通过本发明实施例提供的卡顿监控方法实现主线程的卡顿监控及对应app的卡顿点定位。

对于本实施例,为降低对主线程的侵入性,减少卡顿监控对主线程性能的影响,单独构建用于对主线程进行卡顿监控的监控线程。在其他实施例中,所述单独构建的监控线程不仅仅可用于对单个主线程进行卡顿监控,还可用于同时对分别对应多个app的多个主线程进行卡顿监控。

对于本实施例,需对主线程进行卡顿监控时,单独的监控线程主动向所述主线程发送预置任务,即单独的监控线程主动往所述主线程扔一个待其执行的任务。

其中,所述预置任务为待所述主线程执行的任务,其可以是界面刷新、参数调整等任务内容,本技术领域的技术人员可根据实际应用需求确定所述预置任务的具体任务内容,本实施例对此不做限定。

为进一步减少卡顿监控对主线程性能的影响,所述预置任务优选为内容简单且耗时短的任务。此外,为了避免卡顿监控给用户造成额外的可感知的卡顿体验,所述预置任务为非界面操作相关的任务。

步骤s120:确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务。

对于本实施例,通过在预置任务发出的一定时间间隔之后检查该预置任务是否被执行实现卡顿监控,具体地,在监控线程向主线程发送预置任务之后,开始计时,在确定当前时间距离预置任务发出时间已经达到预置时间间隔时,所述监控线程判断所述主线程是否已执行所述预置任务。

对于本实施例,本领域技术人员可根据实际应用需求确定或灵活调节所述预置时间间隔的具体间隔时长,以实现不同级别的卡顿监控。

例如,欲监控app主线程是否会发生轻微卡顿时,可以将所述预置时间间隔设置为50ms、80ms等较短的间隔时长。

又例如,仅对app主线程是否会发生严重卡顿进行监控时,可以将所述预置时间间隔设置为2s、2.5s、3s等较长的间隔时长。

步骤s130:若所述主线程未执行所述预置任务,确定所述主线程发生卡顿。

对于本实施例,若一定时间间隔之后检查得该预置任务已被执行,即所述主线程已执行所述预置任务,则表示当前主线程响应良好,暂未发生卡顿;若一定时间间隔之后检查得该预置任务未被执行,即所述主线程未执行所述预置任务,则表示主线程卡在某个耗时任务上,未能及时响应该预置任务,则可确定所述主线程发生卡顿。

步骤s140:获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

对于本实施例,所述卡顿堆栈信息为与所述主线程发生卡顿相关联的堆栈信息。

对于本实施例,所获取的卡顿堆栈信息不仅仅是主线程发生卡顿那一刻对应的卡顿堆栈信息,可是自发生卡顿起一定时长内的卡顿堆栈信息,可为服务器提供丰富的卡顿信息,以为提高卡顿定位的准确性提供有力的技术支持。当确定所述主线发生卡顿之后,开始捕捉所述主线程的卡顿堆栈信息,具体地,开始捕捉所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息,并根据一定的策略上报服务器,以将所述卡顿堆栈信息用于诊断分析应用程序的卡顿点。

对于本实施例,所述预置时间区间可以是预先设定的具体时间区间,例如主线程自发生卡顿起1s内,也可以是预先设定的从主线程发生卡顿到其发生状态变化期间内的某个或某些时间区间。

本发明实施例提供的卡顿监控方法,通过单独的监控线程向主线程发送任务,以及检查任务是否被主线程执行的方式检测主线程当前的卡顿状况,并在主线程发送卡顿时上报一定时间区间内的卡顿堆栈信息以辅助定位卡顿,该方法对主线程无侵入性,对app本身运行影响小,可有效提高卡顿监控的准确性,同时为服务器提供丰富的卡顿信息,为提高卡顿定位的准确性提供有力的技术支持。

在一个实施例中,所述确定达到预置时间间隔之后,还包括:

重复所述监控线程向主线程发送预置任务的步骤。

对于本实施例,在开启当前app的卡顿监控功能期间,单独的监控线程通过定时向主线程发送预置任务以实现对主线程的持续卡顿监控,具体地,在确定达到预置时间间隔之后,监控线程在判断主线程是否已执行所述预置任务的同时,还重复向所述主线程发送一个新的预置任务。

以下,结合图2对本发明实施例作进一步详细阐述。参见图2,为对当前app的主线程进行持续卡顿监控的过程示意图,在开启当前app的卡顿监控功能之后,监控线程开始对主线程进行卡顿监控,单独的监控线程向主线程发送第一个预置任务task1,在确定达到预置时间间隔t之后,监控线程检查task1是否已被执行,即判断主线程是否已执行task1,与此同时,监控线程向主线程发送第二个预置任务task2;在确定又达到预置时间间隔t之后,监控线程检查task2是否已被执行并同时向主线程发送第三个预置任务task3;以此类推,监控线程每隔预置时间间隔检测其前次发送的预置任务是否被主线程执行,并再向主线程发送一个新的预置任务,直至当前app的卡顿监控功能被关闭,监控线程才结束对主线程的卡顿监控,不再执行检测预置任务是否被执行及向主线程发送新任务的操作。

在一个实施例中,所述监控线程向主线程发送预置任务,包括:

监控线程对初始值为零的预置整体变量执行加一操作;监控线程向主线程发送命令所述主线程对所述预置整体变量执行减一操作的预置任务;

所述确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务,包括:

确定达到预置时间间隔,监控线程读取当前的预置整体变量;根据所述当前的预置整体变量,判断主线程是否已执行对所述预置整体变量执行减一操作的预置任务。

对于本实施例,引入了一个预置整体变量,所述预置整体变量的初始值为零,所述主线程和所述监控线程均可对所述预置整体变量进行参数调整操作。

对于本实施例,将监控线程向主线程发送一个预置任务并在预置时间间隔之后判断主线程是否已执行所述预置任务作为一个监控周期。在每个监控周期,监控线程均首先对所述预置整体变量执行加一操作,其中,在第一个监控周期,监控线程对为初始值的预置整体变量执行加一操作,监控线程在对预置整体变量执行加一操作之后会向主线程发送一个命令主线程对所述预置整体变量执行减一操作的预置任务;当确定达到预置时间间隔,即下一监控周期到来时,监控线程读取当前的预置整体变量,并根据所述当前的预置整体变量判断主线程是否已执行对所述预置整体变量执行减一操作的预置任务,具体地,若读取的当前的预置整体变量为零,则主线程已对数值本为一的预置整体变量执行减一操作,判定主线程已执行所述预置任务;若读取的当前的预置整体变量大于零,则主线程未及时对预置整体变量执行减一操作,判定主线程未及时执行所述预置任务。

在本实施例中,通过引入预置整体变量,并在主线程和监控线程分别对所述预置整体变量进行加减读写操作,通过提供简单的预置任务进一步减少卡顿监控对主线程性能的影响,且可有效避免多线程操作引发的问题,进一步保证卡顿监控的安全性。

在一个实施例中,所述监控线程向主线程发送预置任务之前,还包括:调起app内预置的卡顿监控sdk。

对于本实施例,预先将可实现卡顿监控的算法程序封装成独立的卡顿监控sdk,将预置的卡顿监控sdk接入至卡顿监控的目标app内。可通过startmonitor和stopmonitor接口来打开和关闭监控。app可在接收到用户发送的卡顿监控请求之后,响应所述卡顿监控请求并调起app内预置的卡顿监控sdk,也可通过默认设置app启动时自动调起app内预置的卡顿监控sdk,以实现app的卡顿监控功能。此外,可实现本发明提供的卡顿监控方法的所述卡顿监控sdk适用范围广,均可适用于android、ios、windows等用户客户端操作系统。

在本实施例中,通过将预置的卡顿监控sdk接入至卡顿监控的目标app内即可对目标app的主线程进行卡顿监控,配置灵活且简单方便。

在一个实施例中,如图3所示,所述步骤s140具体包括:

s141:读取预置的所述主线程的卡顿标志位;

s142a:若所述卡顿标志位为卡顿状态值,维持所述卡顿状态值;

s142b:若所述卡顿标志位为非卡顿状态值,将所述卡顿标志位从非卡顿状态值切换为卡顿状态值,获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

在实际应用场景中,存在监控线程监控得主线程长时间卡在一个耗时任务上并重复上报服务器的现象,即当主线程持续卡在一个耗时任务上时,监控线程每隔预置时间间隔均会监控得主线程发生卡顿,并重复将对应同一卡顿点的卡顿堆栈信息上报服务器。在该情况下,重复上报服务器对卡顿点定位并无实质意义的帮助,反而增加了用户客户端及服务器的工作量。

对于本实施例,为避免将对应同一卡顿点的卡顿堆栈信息上报服务器,预先设置了一个用于表示主线程当前卡顿状态的卡顿标志位,所述卡顿标志位的值可为非卡顿状态值或者卡顿状态值。本发明实施例通过在监控得所述卡顿标志位的值连续为卡顿状态值时不再获取卡顿堆栈信息并上报服务器的方法来避免同一卡顿重复上报,也就是说,仅当非连续监控到主线程发生卡顿,即仅当所述卡顿标志位从非卡顿状态值切换至卡顿状态值时,才获取卡顿堆栈信息并上报服务器。

具体地,所述卡顿标志位的初始值默认为非卡顿状态值。当第一次监控到主线程发生卡顿时,读取得主线程的卡顿标志位的当前值为非卡顿状态值,则将所述卡顿标志位从非卡顿状态值切换至卡顿状态值,获取卡顿堆栈信息并上报服务器;若预置时间间隔之后仍监控到主线程发生卡顿,而读取得所述卡顿标志位的当前值为卡顿状态值,则表示发生了连续卡顿,所述卡顿标志位维持所述卡顿状态值不变,且不获取卡顿堆栈信息并上报服务器;当监控得主线程不再发生卡顿时,读取得主线程的卡顿标志位的当前值为卡顿状态值,则将所述卡顿标志位的值从卡顿状态值切换至非卡顿状态值。其中,所述非卡顿状态值可具体为0,所述卡顿状态值可具体为1。

在本实施例中,通过设置卡顿标志位并根据发生卡顿时卡顿标志位的值确定是否上报服务器,可有效避免将对应同一卡顿点的卡顿堆栈信息重复上报服务器,减少了用户客户端及服务器的冗余工作量。

在一个实施例中,所述确定所述主线程发生卡顿,包括:获取所述主线程当前的cpu占用率;判断所述cpu占用率是否大于预置阈值;若是,确定所述主线程发生卡顿。

在实际应用场景中,当主线程执行一个耗时任务时,操作系统会分配更多的cpu资源给予主线程执行。

对于本实施例,为进一步提高卡顿监控的准确性,避免主线程在执行一系列连续但是每个都耗时不久的任务时被误报为发生卡顿,引入了cpu占用率的参考因素。

具体地,若所述主线程未执行所述预置任务,则进一步获取所述主线程当前的cpu占用率,判断所述cpu占用率是否大于预置阈值,若所述cpu占用率大于所述预置阈值,才确定所述主线程发生卡顿,若所述cpu占用率小于等于所述预置阈值,则确定所述主线程未发生卡顿。

作为一个优选实施例,所述预置阈值可具体为100%。本技术领域的技术人员可根据实际应用需求确定所述预置阈值的具体数值,本实施例对此不做限定。

在本实施例中,通过在所述主线程未执行所述预置任务时进一步根据cpu占用率确定所述主线程是否发生卡顿,可进一步提高卡顿监控的准确性。

在一个实施例中,所述获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器,包括:

定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器。

在实际应用场景中,存在主线程不是被一个耗时任务阻塞,而是因连续执行多个耗时较短的任务而导致后续请求得不到及时响应的情况。在该情况下所获取的卡顿堆栈信息是不准确的,容易影响后续服务器分析卡顿定位的准确性。

对于本实施例,针对上述情况,在确定所述主线程发生卡顿之后,定时获取所述主线程自发生卡顿到重新确定未发生卡顿,即监控得主线程不再发生卡顿期间内的卡顿堆栈信息,并将在该期间定时获取的所有卡顿堆栈信息进行汇总并上报服务器,以得到卡顿期间主线程的实际执行任务情况,即cpu都消耗在哪些函数调用上,而非仅获取确定主线程发生卡顿那一刻对应的主线程执行情况,从而实现为服务器提供丰富的卡顿信息,以为提高卡顿定位的准确性提供有力的技术支持。

其中,本技术领域的技术人员可根据监控的精度需求确定定时获取卡顿堆栈信息的时间间隔,本实施例对此不做限定。

例如,在自发生卡顿到重新确定未发生卡顿期间,每隔5ms或者10ms获取卡顿堆栈信息,对在该期间定时获取的所有卡顿堆栈信息进行汇总并上报服务器。

在本实施例中,通过定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器,可为服务器后续分析卡顿点和解决卡顿问题提供丰富的信息,为提高卡顿定位的准确性提供有力的技术支持。

此外,如图4所示,本发明实施例提供了又一种卡顿监控方法,包括如下步骤:

步骤s410:客户端监控线程向主线程发送预置任务;确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务;若所述主线程未执行所述预置任务,确定所述主线程发生卡顿;获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

对于本实施例,所述步骤s410中客户端的具体功能实现与以上应用于用户客户端的卡顿监控方法中的步骤s110至s140中的技术特征相同,所述步骤s410的具体功能实现请参见上述实施例中的说明,在此不再赘述。

在本实施例提供的卡顿监控方法中,所述客户端还可实现以上应用于用户客户端的卡顿监控方法的其他方法实施例,具体功能实现请参见上述方法实施例中的说明,在此亦不再赘述。

步骤s420:所述服务器接收所述客户端上报的所述卡顿堆栈信息;对所述卡顿堆栈信息进行聚类分析,得到卡顿点。

对于本实施例,在客户端上报卡顿堆栈信息之后,相应地,服务器接收到所述卡顿堆栈信息。在实际应用场景中,客户端在上报卡顿堆栈信息的同时,还会同时携带上报所述堆栈信息对应的客户端信息及app信息,其中,所述客户端信息包括但不限于客户端的操作系统版本、终端设备的型号。所述app信息包括但不限于app的名称、app的版本。

服务器在对所述卡顿堆栈信息进行聚类分析之前,需预先对客户端上报的卡顿堆栈信息进行整理,具体地,服务器对客户端上报的卡顿堆栈信息从上到下提取出各级函数名,并结合对应所述卡顿堆栈信息的客户端信息和app信息,针对各级函数名在数据库当中插入一条卡顿记录,例如所述卡顿记录包括客户端的操作系统版本,移动终端的机型,app名称,app版本及所提取的函数名。

对于本实施例,对所述卡顿堆栈信息进行聚类分析并得到卡顿点具体为,通过设置不同操作系统版本、型号、app名称及app版本查询上报的函数,满足上述筛选规则的函数将会按照存在的数量从大到小的排序显示,排在前列,即存在数量较大的函数则可确定为卡顿点,即主线程在调用该函数时发生卡顿。通过合理的聚类和排序,能够很方便的看到当前客户端各个卡顿点问题的严重性,方便开发人员根据优先级对严重的卡顿问题进行修复。

例如,如图5所示,为对卡顿堆栈信息进行聚类分析的效果图。由图5可知,对应待分析的应用为当前监控的bigolive直播app,app版本为4.6.0,客户端的机型为iphone8.1,操作系统版本为ios12.1的筛选条件下,有3个用在_main(inbigoshow)这个方法调用上发生了卡顿。

在本实施例中,通过客户端对主线程进行卡顿监控并上报卡顿堆栈信息,服务器对卡顿堆栈信息进行聚类分析并得到卡顿点,可有效保证卡顿监控及卡顿定位的准确性,从而为开发者根据卡顿点对app作针对性优化提供有力的技术支持,可有效降低app因卡顿问题而导致的用户流失风险。

此外,本发明实施例提供了一种卡顿监控装置,如图6所示,所述装置包括:任务发送模块61、判断模块62、卡顿确定模块63和堆栈上报模块64;其中,

所述任务发送模块61,用于监控线程向主线程发送预置任务;

所述判断模块62,用于确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务;

所述卡顿确定模块63,用于若所述主线程未执行所述预置任务,确定所述主线程发生卡顿;

所述堆栈上报模块64,用于获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

在一个实施例中,所述确定达到预置时间间隔之后,还包括:

重复所述监控线程向主线程发送预置任务的步骤。

在一个实施例中,所述堆栈上报模块64,具体用于:

读取预置的所述主线程的卡顿标志位;

若所述卡顿标志位为卡顿状态值,维持所述卡顿状态值;

若所述卡顿标志位为非卡顿状态值,将所述卡顿标志位从非卡顿状态值切换为卡顿状态值,获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器。

在一个实施例中,所述确定所述主线程发生卡顿,包括:

获取所述主线程当前的cpu占用率;

判断所述cpu占用率是否大于预置阈值;

若是,确定所述主线程发生卡顿。

在一个实施例中,任务发送模块61,具体用于:

监控线程对初始值为零的预置整体变量执行加一操作;

监控线程向主线程发送命令所述主线程对所述预置整体变量执行减一操作的预置任务;

所述判断模块62,具体用于:

确定达到预置时间间隔,监控线程读取当前的预置整体变量;

根据所述当前的预置整体变量,判断主线程是否已执行对所述预置整体变量执行减一操作的预置任务。

在一个实施例中,所述堆栈上报模块64,具体用于:

定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器。

本发明提供的卡顿监控装置可实现:通过单独的监控线程向主线程发送任务,以及检查任务是否被主线程执行的方式检测主线程当前的卡顿状况,并在主线程发送卡顿时上报一定时间区间内的卡顿堆栈信息以辅助定位卡顿,该方法对主线程无侵入性,对app本身运行影响小,可有效提高卡顿监控的准确性,同时为服务器提供丰富的卡顿信息,为提高卡顿定位的准确性提供有力的技术支持。此外,还可实现:通过引入预置整体变量,并在主线程和监控线程分别对所述预置整体变量进行加减读写操作,通过提供简单的预置任务进一步减少卡顿监控对主线程性能的影响,且可有效避免多线程操作引发的问题,进一步保证卡顿监控的安全性;通过设置卡顿标志位并根据发生卡顿时卡顿标志位的值确定是否上报服务器,可有效避免将对应同一卡顿点的卡顿堆栈信息重复上报服务器,减少了用户客户端及服务器的冗余工作量;通过在所述主线程未执行所述预置任务时进一步根据cpu占用率确定所述主线程是否发生卡顿,可进一步提高卡顿监控的准确性;通过定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器,可为服务器后续分析卡顿点和解决卡顿问题提供丰富的信息,为提高卡顿定位的准确性提供有力的技术支持。

本发明实施例提供的卡顿监控装置可以实现上述提供的方法实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。

此外,如图7所示,本发明实施例提供了一种卡顿监控系统,所述卡顿监控系统包括客户端71和服务器72;其中,

所述客户端71用于监控线程向主线程发送预置任务;确定达到预置时间间隔,所述监控线程判断所述主线程是否已执行所述预置任务;若所述主线程未执行所述预置任务,确定所述主线程发生卡顿;获取所述主线程自发生卡顿起预置时间区间内的卡顿堆栈信息并上报服务器;

服务器72用于接收客户端上报的所述卡顿堆栈信息;对所述卡顿堆栈信息进行聚类分析,得到所述主线程的卡顿点。

本发明提供的卡顿监控系统,可实现:通过客户端对主线程进行卡顿监控并上报卡顿堆栈信息,服务器对卡顿堆栈信息进行聚类分析并得到卡顿点,可有效保证卡顿监控及卡顿定位的准确性,从而为开发者根据卡顿点对app作针对性优化提供有力的技术支持,可有效降低app因卡顿问题而导致的用户流失风险。

本发明实施例提供的卡顿监控系统可以实现上述提供的应用于客户端和服务端的方法实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。

此外,本发明实施例提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以上实施例所述的卡顿监控方法。其中,所述计算机可读存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、cd-rom、和磁光盘)、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随即存储器)、eprom(erasableprogrammableread-onlymemory,可擦写可编程只读存储器)、eeprom(electricallyerasableprogrammableread-onlymemory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储设备包括由设备(例如,计算机、手机)以能够读的形式存储或传输信息的任何介质,可以是只读存储器,磁盘或光盘等。

本发明提供的计算机可读存储介质,可实现:通过单独的监控线程向主线程发送任务,以及检查任务是否被主线程执行的方式检测主线程当前的卡顿状况,并在主线程发送卡顿时上报一定时间区间内的卡顿堆栈信息以辅助定位卡顿,该方法对主线程无侵入性,对app本身运行影响小,可有效提高卡顿监控的准确性,同时为服务器提供丰富的卡顿信息,为提高卡顿定位的准确性提供有力的技术支持。此外,还可实现:通过引入预置整体变量,并在主线程和监控线程分别对所述预置整体变量进行加减读写操作,通过提供简单的预置任务进一步减少卡顿监控对主线程性能的影响,且可有效避免多线程操作引发的问题,进一步保证卡顿监控的安全性;通过设置卡顿标志位并根据发生卡顿时卡顿标志位的值确定是否上报服务器,可有效避免将对应同一卡顿点的卡顿堆栈信息重复上报服务器,减少了用户客户端及服务器的冗余工作量;通过在所述主线程未执行所述预置任务时进一步根据cpu占用率确定所述主线程是否发生卡顿,可进一步提高卡顿监控的准确性;通过定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器,可为服务器后续分析卡顿点和解决卡顿问题提供丰富的信息,为提高卡顿定位的准确性提供有力的技术支持。

本发明实施例提供的计算机可读存储介质可以实现上述提供的方法实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。

此外,本发明实施例还提供了一种计算机设备,如图8所示。本实施例所述的计算机设备可以是服务器、个人计算机以及网络设备等设备。所述计算机设备包括处理器802、存储器803、输入单元804以及显示单元805等器件。本领域技术人员可以理解,图8示出的设备结构器件并不构成对所有设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件。存储器803可用于存储计算机程序801以及各功能模块,处理器802运行存储在存储器803的计算机程序801,从而执行设备的各种功能应用以及数据处理。存储器可以是内存储器或外存储器,或者包括内存储器和外存储器两者。内存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦写可编程rom(eeprom)、快闪存储器、或者随机存储器。外存储器可以包括硬盘、软盘、zip盘、u盘、磁带等。本发明所公开的存储器包括但不限于这些类型的存储器。本发明所公开的存储器只作为例子而非作为限定。

输入单元804用于接收信号的输入,以及接收用户输入的关键字。输入单元804可包括触控面板以及其它输入设备。触控面板可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并根据预先设定的程序驱动相应的连接装置;其它输入设备可以包括但不限于物理键盘、功能键(比如播放控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。显示单元805可用于显示用户输入的信息或提供给用户的信息以及计算机设备的各种菜单。显示单元805可采用液晶显示器、有机发光二极管等形式。处理器802是计算机设备的控制中心,利用各种接口和线路连接整个电脑的各个部分,通过运行或执行存储在存储器802内的软件程序和/或模块,以及调用存储在存储器内的数据,执行各种功能和处理数据。

作为一个实施例,所述计算机设备包括:一个或多个处理器802,存储器803,一个或多个计算机程序801,其中所述一个或多个计算机程序801被存储在存储器803中并被配置为由所述一个或多个处理器802执行,所述一个或多个计算机程序801配置用于执行以上任一实施例所述的卡顿监控方法。

本发明提供的计算机设备,可实现:通过单独的监控线程向主线程发送任务,以及检查任务是否被主线程执行的方式检测主线程当前的卡顿状况,并在主线程发送卡顿时上报一定时间区间内的卡顿堆栈信息以辅助定位卡顿,该方法对主线程无侵入性,对app本身运行影响小,可有效提高卡顿监控的准确性,同时为服务器提供丰富的卡顿信息,为提高卡顿定位的准确性提供有力的技术支持。此外,还可实现:通过引入预置整体变量,并在主线程和监控线程分别对所述预置整体变量进行加减读写操作,通过提供简单的预置任务进一步减少卡顿监控对主线程性能的影响,且可有效避免多线程操作引发的问题,进一步保证卡顿监控的安全性;通过设置卡顿标志位并根据发生卡顿时卡顿标志位的值确定是否上报服务器,可有效避免将对应同一卡顿点的卡顿堆栈信息重复上报服务器,减少了用户客户端及服务器的冗余工作量;通过在所述主线程未执行所述预置任务时进一步根据cpu占用率确定所述主线程是否发生卡顿,可进一步提高卡顿监控的准确性;通过定时获取所述主线程自发生卡顿到重新确定未发生卡顿期间内的卡顿堆栈信息并上报服务器,可为服务器后续分析卡顿点和解决卡顿问题提供丰富的信息,为提高卡顿定位的准确性提供有力的技术支持。

本发明实施例提供的计算机设备可以实现上述提供的方法实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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