CN112052078A - 一种耗时的确定方法和装置 - Google Patents
一种耗时的确定方法和装置 Download PDFInfo
- Publication number
- CN112052078A CN112052078A CN201910492291.3A CN201910492291A CN112052078A CN 112052078 A CN112052078 A CN 112052078A CN 201910492291 A CN201910492291 A CN 201910492291A CN 112052078 A CN112052078 A CN 112052078A
- Authority
- CN
- China
- Prior art keywords
- calling
- call
- main thread
- link
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于采集的调用链路进行调用耗时的确定方法和装置,该方法包括:在客户端的主线程在预定任务时,利用与所述主线程异步的监控线程按照预定时间间隔采集所述主线程的方法调用,并获得所述主线程进行方法调用的调用链路;在所述主线程执行完所述预定任务后,聚合多个按所述预定时间间隔采集的所述调用链路,得到聚合结果;基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时。
Description
技术领域
本发明涉及信息技术领域,尤其涉及一种调耗时的确定方法和装置。
背景技术
客户端在运行时,若需要对运用的方法(method)调用进行追踪分析。在客户端的源代码中设置了多个可被调用的调用方法,一个所述调用方法可能对应了客户端需要实现的一个功能。通过追踪分析可以知道该方法的调用情况。
相关技术中进行方法调用追踪分析通常具有如下方法:
在客户端中手动埋点的方案:该方案需要对所有方法加入埋点,对包大小和性能影响都很大,而且无法覆盖系统级别的方法,无法全面监控。
通过hook(挂钩)方式在客户端的源代码中插入异常处理代码进行方法调用的追踪分析:该方案会改动原始方法所对应的源代码,由于相当于执行方法中引入了其他代码,对性能有一定影响,若引入的异常处理代码出现问题还会引发崩溃问题。。
如何尽可能的减少对客户端原有的逻辑执行情况下,能够全面监控客户端的方法调用状况,是现有技术仍需进一步解决的问题。
发明内容
本发明的一个目的是提供一种耗时的确定方法和装置,以解决现有客户端的方法调用监控不全面或会干扰原有执行逻辑的问题。
根据本发明的第一方面,一种耗时确定方法,包括:
通过与主线程异步的监控线程,按照预定时间间隔获取所述主线程进行函数调用的调用链路;
对相邻时间间隔获取的相同的调用链路,进行聚合处理;
确定聚合处理后的各调用链路中各函数调用所需的调用耗时。
根据本发明的第二方面,一种基于采集的调用链路进行调用耗时的确定方法,包括:
利用与主线程异步的监控线程按照预定时间间隔获取所述主线程的方法调用及所述主线程进行所述方法调用的调用链路;
在所述主线程执行完所述方法调用后,聚合相邻所述预定时间间隔获取的相同所述调用链路,得到聚合结果;
基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时;
基于所述调用耗时输出调用状况信息。
基于上述方案,所述利用与主线程异步的监控线程按照预定时间间隔获取所述主线程调用的方法进行采集,获得所述主线程的调用链路,包括:利用所述监控线程按照预定时间间隔采集主线程的堆栈,获得所述主线程的调用链路,其中,所述堆栈内包含所述主线程的调用方法的调用信息。
基于上述方案,所述基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时,包括:
将一个所述调用方法所对应所述预定时间间隔累加,获得所述调用耗时。
基于上述方案,所述基于所述调用耗时输出调用状况信息,还包括:
基于所述聚合结果和所述调用耗时,生成以调用方法和调用耗时为节点的树状结构;
遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息;
将所述调用状况信息返回给服务端。
基于上述方案,所述调用状况信息包括以下至少之一:
调用链路所包含调用方法的方法数字地址;
调用方法的方法数字地址。
基于上述方案,所述方法数字地址用于服务端符号化后进行问题分析和定位。
基于上述方案,所述遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息,包括:
遍历所述树状结构,获得所述主线程执行预定任务的调用耗时最大的调用链路和/或调用方法。
根据本发明的第三方面,一种耗时确定装置,其特征在于,包括:
第一获取模块,用于通过与主线程异步的监控线程,按照预定时间间隔获取所述主线程进行函数调用的调用链路;
第一聚合模块,用于对相邻时间间隔获取的相同的调用链路,进行聚合处理;
确定模块,用于确定聚合处理后的各调用链路中各函数调用所需的调用耗时。
根据本发明的第四方面,一种基于采集的调用链路进行调用耗时的确定装置,其特征在于,包括:
第二获取模块,用于利用与主线程异步的监控线程按照预定时间间隔获取所述主线程的方法调用及所述主线程进行所述方法调用的调用链路;
第二聚合模块,用于在所述主线程执行完所述方法调用后,聚合相邻所述预定时间间隔获取的相同所述调用链路,得到聚合结果;
统计模块,用于基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时;
输出模块,用于基于所述调用耗时输出调用状况信息。
基于上述方案,所述第二获取模块,具体用于利用所述监控线程按照预定时间间隔采集主线程的堆栈,获得所述主线程的调用链路,其中,所述堆栈内包含所述主线程的调用方法的调用信息。
基于上述方案,所述统计模块,具体用于将一个所述调用方法所对应所述预定时间间隔累加,获得所述调用耗时。
基于上述方案,所述输出模块,具体用于基于所述聚合结果和所述调用耗时,生成以调用方法和调用耗时为节点的树状结构;遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息;将所述调用状况信息返回给服务端。
基于上述方案,所述调用状况信息包括以下至少之一:
调用链路所包含调用方法的方法数字地址;
调用方法的方法数字地址。
基于上述方案,所述方法数字地址用于服务端符号化后进行问题分析和定位。
基于上述方案,所述输出模块,具体用于遍历所述树状结构,获得所述主线程执行预定任务的调用耗时最大的调用链路和/或调用方法。
根据本发明的第五方面,提供一种存储介质,所述存储介质存储计算机程序指令,所述计算机程序指令根据本发明所述的方法进行执行。
根据本发明的第六方面,提供一种计算设备,包括:用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述计算设备执行本发明所述的方法。
根据本发明的第七方面,提供一种耗时确定方法和装置,该方法包括:
确定待监控的函数;
通过与主线程异步的监控线路,获取函数的调用链路;
基于获取的函数的调用链路,确定函数调用耗时。
该装置包括:
监测模块,用于确定待监控的函数;
第一获取模块,用于通过与主线程异步的监控线路,获取函数的调用链路;
确定模块,用于基于获取的函数的调用链路,确定函数调用耗时。
本发明提供的技术方案,利用与客户端的主线程异步的监控线程采集主线程在执行预定任务时的调用方法或称之为调用函数,然后在主线程的预定任务执行结束之后,聚合相邻预定时间间隔采集的调用方法,再基于聚合的结果及各调用方法被采集的相邻预定时间间隔的数目,就能够得到主线程执行预定任务时的调用方法所产生的调用耗时;如此,一方面,可以由不干扰客户端既有的逻辑执行的异步的监控线程监控主线程所调用的方法及其对应的调用链路,从而减少了对主线程执行预定任务调用方法的监控缺失现象;另一方面,与主线程异步的所述监控线程主动统计出执行所述预定任务被调用的方法所产生的调用耗时,从而实现了调用链路和调用耗时的监控,从而在执行任务超时时,可以结合调用耗时定位出导致任务执行超时的问题调用链路和/或调用方法。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1A为本发明实施例提供的一种耗时确定方法的流程示意图。
图1B为本发明实施例提供的一种基于采集的调用链路进行调用耗时的确定方法的流程示意图;
图2为本发明实施例提供的一种按照预定时间间隔的方法堆栈采集的效果示意图;
图3为本发明实施例提供的一种调用状况信息的确定流程示意图;
图4为本发明实施例提供的一种树状方法调用图的效果示意图;
图5为本发明实施例提供的一种方法调用采集、聚合及分析的示意图;
图6A为本发明实施例提供的一种耗时确定装置的结构示意图;
图6B为本发明实施例提供的一种基于采集的调用链路进行调用耗时的确定装置的结构示意图;
图7为本发明实施例的另一种基于采集的调用链路进行调用耗时的确定方法的流程示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
图1A为本发明实施例提供的耗时确定方法的流程示意图,如图1A所示,本发明实施例提供的一种耗时确定方法,包括:
步骤S001,通过与主线程异步的监控线程,按照预定时间间隔获取所述主线程进行函数调用的调用链路;
步骤S002,对相邻时间间隔获取的相同的调用链路,进行聚合处理;
步骤S003,确定聚合处理后的各调用链路中各函数调用所需的调用耗时。
在本发明实施例中所述客户端为安装在终端的程序或应用。该客户端可为各种类型的客户端,例如,购物客户端、支付客户端、金融客户端、社交客户端、浏览器客户端或者阅读客户端等。
在本实施例中所述客户端可以安装在固定端或移动端中,优选为移动端。所述移动端包括但不限于手机、平板或可穿戴式设备。所述固定端包括但不限于个人电脑(PC)等。
该函数调用又可以称之为方法调用。
图1为本发明实施例提供的一种基于采集的调用链路进行调用耗时的确定方法的流程示意图,如图1所示,本发明实施例提供的一种基于采集的调用链路进行调用耗时的确定方法,包括:
步骤S101,利用与主线程异步的监控线程按照预定时间间隔获取所述主线程的方法调用及所述主线程进行所述方法调用的调用链路;
步骤S102,在所述主线程执行完所述方法调用后,聚合相邻所述预定时间间隔获取的相同所述调用链路,得到聚合结果;
步骤S103,基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时;
步骤S104,基于所述调用耗时输出调用状况信息。
所述客户端所执行的预定任务包括但不限于:客户端的启动任务。在一些实施例中,所述预定任务还包括各种与客户端的主要功能相适配的任务、例如,针对如淘宝客户端等购物客户端,所述预定任务还包括但不限于从商品显示界面跳转到订单页面的跳转任务等。
在本实施例中为了监控客户端的主线程执行预定任务的调用链路等调用状况信息,会设置一个与主线程异步的且不干扰主线程原有的业务逻辑执行的监控线程。所述主线程可包括:执行所述客户端的主函数(main)的线程。所述主线程和监控线程使用的是终端内的不同线程,终端为主线程和监控线程分别配置了不同的线程资源,在执行过程中,主线程和监控线程互不干扰。监控线程会按照预定时间间隔采集主线程的方法调用;采集操作并不干扰所述主线程的方法调用。例如,所述监控线程可以通过从方法调用时使用的堆栈采集被调用的方法的信息,从而确定出所述主线程所调用方法使用的调用链路。再例如,所述监控线程可以监控主线程信息收发的总线等,从而获知主线程所调用的方法。
在本实施例中,所述主线程的调用方法又可以称之为调用函数(method)。
所述调用链路为:主线程所调用的方法依次连接形成的调用路径。
例如,主方法在A时刻依次调用了方法A、方法B、方法C,则方法A、方法B,再到方法C就形成了所述调用链路。
图2所示为本示例利用与主线程异步的监控线程分别在t1至t6采集的调用链路,具体如下:
在t1时刻,监控线程采集的调用链路分别是:main——>UIApplicationMain——>method1——>method2——>……;
在t2时刻,监控线程采集的调用链路分别是:main——>UIApplicationMain——>method1——>method3——>……;
在t3时刻,监控线程采集的调用链路分别是:main——>UIApplicationMain——>method1——>method4——>……;
在t4时刻,监控线程采集的调用链路分别是:main——>UIApplicationMain——>method1——>method4——>……;
在t5时刻,监控线程采集的调用链路分别是:main——>UIApplicationMain——>method1——>method4——>……;
在t6时刻,监控线程采集的调用链路分别是:main——>UIApplicationMain——>method6——>method7——>……。
如此,异步线程以预定时间间隔采集所述主线程所调用的方法,得到了t1至t6时刻各自的调用链路。
所述预定时间间隔可为预先设定的时间间隔,例如,客户端的开发商预先设定的时间间隔。
在一些实施例中,任意两个所述预定时间间隔可为相等的时间间隔,如此,与主线程异步的监控线程相当于会周期性采集正在执行预定任务的主线程所调用的方法。
在另一些实施例中,有部分预定时间间隔是不等的,可以是所述监控线程动态设置的。
例如,与主线程异步的监控线程在主线程执行预定任务的开始时刻以第一时间间隔对主线程的调用方法进行采集,发现每次采集的主线程的调用方法或调用链路都不同,可能认为当前设置的预定时间间隔不合理,则以比所述第一时间间隔小的第二时间间隔对所述主线程的调用方法进行采集。
再例如,与主线程异步的监控线程在主线程执行预定任务的开始时刻以第一时间间隔对主线程的调用方法进行采集,发现任意相邻两次或大多数的相邻两次或多次采集的主线程的调用方法或调用链路都相同,可能认为当前设置的预定时间间隔不合理,则以比所述第一时间间隔大的第三时间间隔对所述主线程的调用方法进行采集。
如此,所述监控线程通过动态调增预定时间间隔,可以很好的平衡采集的频次和所需采集的次数,减少过小的预定时间间隔所带来的不必要采集和采集所消耗的资源;也可以减少过大的预定时间间隔导致的无法获得精确的调用状况信息的现象。
所述步骤S102会将相邻两个预定时间间隔内采集的调用方法进行合并。如图2所示,在t3、t4及t5时刻所采集到的调用方法和调用链路都相同。基于时间的连续性,监控线程会认为主线程在t3至t5时刻内的调用链路都是:UIApplicationMain——>method1——>method4——>……;如此,将t3至t5时刻的调用方法进行合并,从而实现聚合。
所述步骤S103会基于聚合所产生的聚合结果进行调用时间统计。例如,如图2所示,在t1时刻,主线程的调用链路为:main——>UIApplicationMain——>method1——>method2——>……;在t2时刻,主线程的调用链路为:main——>UIApplicationMain——>method1——>method3——>……。监控线程会认为:调用链路main——>UIApplicationMain——>method1——>method2——>……的调用耗时为t2减去t1的时间间隔。而调用链路UIApplicationMain——>method1——>method4——>……所对应的调用耗时为t5减去t3;如此,就完成了调用耗时的统计。
在一些实施例中,为了方便所述调用耗时的统计,可以采用任意两个预定时间间隔都相同的周期性采集方法进行主线程的调用方法的采集,如此,后续可以通过统计同一个调用链路所跨过的相邻采集时刻的个数,就能够通过与所述预定时间间隔的相乘,简便的统计出所述调用耗时。
所述步骤S110可包括:
在客户端的主线程在执行启动任务时,利用与所述主线程异步的监控线程按照预定时间间隔采集所述主线程的调用方法进行采集,获得所述主线程的调用链路。
在本实施例中所述预定任务包括启动任务。
在本实施例中,所述监控线程主要监控客户端启动时所调用的方法,和各被调用方法所产生的调用耗时,在主线程执行启动任务时,同样会产生多条调用链路,通过调用链路的采集和调用耗时的统计,可以确定出应用在执行启动任务时哪些调用链路是耗时较大的链路,从而可以针对性的进行优化,解决客户端的启动延时大的问题,优化客户端的启动。
在一些实施例中,所述步骤S101可包括:
利用所述监控线程按照预定时间间隔采集主线程的堆栈,获得所述主线程的调用链路,其中,所述堆栈内包含所述主线程的调用方法的调用信息。
主线程会利用堆栈进行方法调用,在堆栈中存储有主线程调用各种方法的方法数字地址。所述监控线程可以通过读取所述堆栈在采集时刻存储的方法数据地址,就可以知道主线程调用了哪些方法,不同时刻的调用链路所包含的调用方法;具有实现简单,对主线程执行预定任务的业务逻辑完全没有干扰的优点。
在一些实施例中,所述S102可包括:将相邻采集时刻采集的相同调用链路进行合并,得到所述聚合结果。
具体的如,在图2中t3和t4是相邻的采集时刻;t4和t5是相邻的采集时刻;如此,通过两次合并,会将相同采集的调用链路进行合并。
在一些实施例中,所述步骤S103具体可包括:将一个调用方法所对应所述预定时间间隔累加,获得所述调用耗时。
堆栈是一种仅能够在栈顶进行数据删除或插入的数据结构。
监控线程在每个采集时刻都会采集整个堆栈内存储的被调用方法的信息(包括但不限于所述方法数字地址)。若堆栈的栈顶有一个或多个存储位置存储的方法数字地址发生变化,就可以知道哪些调用方法被调用完了,从而得到调用耗时。例如,在A时刻和B时刻采集到堆栈中存储的调用方法的信息,仅是栈顶的一个存储位置有调用方法1更改为了调用方法2,且在A时刻为首次采集到调用方法1位于堆栈的栈顶,可认为调用方法1的调用耗时为B时刻减去A时刻。
总之,在本实施例中,将一个调用放阿飞所对应的预定时间间隔累加,就可以直接完成所述调用耗时的统计,具有实现简便的特点。
在一些实施例中,如图3所示,所述方法还包括:
步骤S301,基于所述聚合结果和所述调用耗时,生成以调用方法和调用耗时为节点的树状结构;
步骤S302,遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息;
步骤S303,将所述调用状况信息返回给服务端。
在本实施例中,为了方便后面对调用链路、调用方法及调用耗时等调用状况信息的至少其中之一的进一步分析,会被调用方法的树状结构。
图4所示为一种本实施例提供的树状结构的示意图。图4是基于图2所示的采集信息生成的树状结构。
图4所示的树状结构,树状结构的根节点为主函数(main)、主函数的(main)的子节点为(UIApplicationMain),从节点(UIApplicaitonMain)开始之后就是各个调用方法所在的节点。
在调用方法所在的节点中既有调用方法的标识信息,还包括该方法的调用耗时。例如,如图4所示,节点{method1(0.01s)}。0.01s为调用耗时。
在一些实施例中,所述调用状况信息包括以下至少之一:调用链路所包含调用方法的方法数字地址;调用方法的方法数字地址。
在一些实施例中,所述方法数字地址用于服务端符号化后进行问题分析和定位。
在一些实施例中,所述步骤S302可包括:遍历所述树状结构,获得所述主线程执行预定任务的调用耗时最大的调用链路和/或调用方法。
图5所示为:异步线程按照0.005s的预定时间间隔采集主线程执行启动任务时调用方法的堆栈获得采集信心;通过方法堆栈聚合,生成的树状结构。
图6A为本发明实施例的耗时确定装置的结构示意图,如图6A所示,本实施例提供的一种耗时确定装置,包括:
第一获取模块01,用于通过与主线程异步的监控线程,按照预定时间间隔获取所述主线程进行函数调用的调用链路;
第一聚合模块02,用于对相邻时间间隔获取的相同的调用链路,进行聚合处理;
确定模块03,用于确定聚合处理后的各调用链路中各函数调用所需的调用耗时。
该装置可以用于各种电子设备中。
图6B为本发明实施例的基于采集的调用链路进行调用耗时的确定装置的结构示意图,如图6B所示,本发明实施例的基于采集的调用链路进行调用耗时的确定装置,包括:第二获取模块61、第二聚合模块62、统计模块63及输出模块64。
所述第二获取模块61,用于利用与主线程异步的监控线程按照预定时间间隔获取所述主线程的方法调用及所述主线程进行所述方法调用的调用链路;
所述第二聚合模块62,用于于在所述主线程执行完所述方法调用后,聚合相邻所述预定时间间隔获取的相同所述调用链路,得到聚合结果;
所述统计模块63,用于基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时;
所述输出模块64,用于基于所述调用耗时输出调用状况信息。
所述第二获取模块61,用于利用与所述主线程异步的监控线程按照预定时间间隔采集所述主线程的调用方法进行采集,获得所述主线程的调用链路。
在本发明实施例的一个实施例中,所述第二获取模块61,具体用于利用所述监控线程按照预定时间间隔采集主线程的堆栈,获得所述主线程的调用链路,其中,所述堆栈内包含所述主线程的调用方法的调用信息。
在本发明实施例的一个实施例中,所述第二聚合模块62,具体用于将相邻采集时刻采集的相同调用链路进行合并,得到所述聚合结果;
在本发明实施例的一个实施例中,所述统计模块63,具体用于将一个调用方法所对应所述预定时间间隔累加,获得所述调用耗时。
在本发明实施例的一个实施例中,所述装置还包括:
生成模块,用于基于所述聚合结果和所述调用耗时,生成以调用方法和调用耗时为节点的树状结构;
遍历模块,用于遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息;
发送模块,用于将所述调用状况信息返回给服务端。
在本发明实施例的一个实施例中,所述调用状况信息包括以下至少之一:
调用链路所包含调用方法的方法数字地址;
调用方法的方法数字地址。
在本发明实施例的一个实施例中,所述方法数字地址用于服务端符号化后进行问题分析和定位。
在本发明实施例的一个实施例中,所述遍历模块,具体用于遍历所述树状结构,获得所述主线程执行预定任务的调用耗时最大的调用链路和/或调用方法。
本发明实施例图6B所示装置为本发明实施例图1和图3所示方法的实现装置,其具体原理与本发明实施例图1和图3所示方法相同,此处不再赘述。
以下结合上述任意实施例提供几个具体示例:
示例1:
本示例提供了一种轻量、无侵入、可以在线上大规模使用的方案,来准确采集任意时间段特定线程执行的方法调用链路和方法耗时,该方案的误差可以控制在10毫秒以内;同时本发明基于采集的调用链路和方法耗时,形成了一套完备的针对应用启动、页面打开等对用户体验至关重要的时间段的耗时方法监控方案,可以快速帮助开发人员及时发现线上影响应用启动、页面打开等性能的直接原因。
目前业界针对应用启动、页面打开等阶段性能问题排查大多是通过应用开发工具(例如,IDE)提供的工具线下复现或者通过插桩的方式进行定位,传统的这些手段对原始业务影响大、无法全面覆盖所有方法、无法在线上大规模使用、排查周期长;本方案可以有效的解决传统方案的这些缺陷,对应用性能和体验的提升具有很大的价值。
本示例提供的方法,如图7所示,具体可包括:
应用启动后,在主线程执行启动任务的同时,会开启一个异步线程进行堆栈采集;该启动任务又可以细分为启动任务一、任务二、任务三……,不同的细分任务可能需要调用不同的方法执行。在主线程启动开始时,开启的异步监控线程通过堆栈采集,确定出主线程调用了哪些方法。
堆栈采集是每隔预定时间间隔(例如,5毫秒)执行一次(这个时间间隔可以自由配置,根据自身业务的需要);
当启动结束,会停止堆栈采集任务,此时会根据启动时长的不同,采集到大量的堆栈,假如,应用启动总耗时5秒,那么可能会采集到1000个主线程的堆栈列表;
这么大量的数据如果全部上传到服务端进行分析,是没有这么多的计算资源的,因此需要在客户端上进行一次聚合分析,将真正耗时的小部分方法寻找出来。
在堆栈采集结束后,会开启另外一个异步线程进行1000个堆栈数据的聚合分析工作,通过聚合分析进行堆栈聚合,最终可以找到最耗时的几个方法堆栈列表,并将它们上传到服务端。
服务端再对上传的堆栈列表进行符号化(此处上传的堆栈列表是方法数字地址,需要符号化才能转换成可以阅读分析的文字符号)。
示例2:
本示例基于示例1提供一种调用耗时的统计确定方法,包括:
a、假设要监控t1到t6时间段内应用在主线程运行的方法调用链路和耗时信息;
b、将t1到t6的时间按deltaT等分,此处假定deltaT=0.005秒;
c、从t1到t6时间段内在异步线程每隔deltaT的时间采集一次主线程的方法调用堆栈;
d、当堆栈采集结束后,也就是时间过了t6后,进入堆栈聚合逻辑,将相邻堆栈相同的方法合并,并且时间累加,不同的方法作为新的叶子节点,最终得到上述的树状方法调用图;
e、从树状方法调用图从底部到顶部,从左至右遍历,就可以得到整个的t1到t6时间段内的方法调用链路,同时每个节点的执行耗时也计算出来了;
f、该方案通过对执行耗时进行过滤,可以找到对应用性能影响比较大的方法耗时和调用链路,针对性的进行问题修复。
在本发明一个实施例中,还提供一种耗时确定方法和装置,该耗时确定方法包括:
确定待监控的函数;
通过与主线程异步的监控线路,获取函数的调用链路;
基于获取的函数的调用链路,确定函数调用耗时。
该耗时确定装置包括:监测模块、第一获取模块和确定模块。
监测模块,用于确定待监控的函数;
第一获取模块,用于通过与主线程异步的监控线路,获取函数的调用链路;
确定模块,用于基于获取的函数的调用链路,确定函数调用耗时。
通过该耗时确定方法和装置,可以不用针对所有函数,例如测试中,只需要确定测试的函数也可实现。
在本发明一个实施例中,还提供一种存储介质,所述存储介质存储计算机程序指令,所述计算机程序指令根据本发明实施例的方法进行执行,例如,图1A、图1B及图3所示的方法。
在本发明一个典型的配置中,计算设备均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
在本发明一个实施例中,还提供一种计算设备,包括:用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述计算设备执行本发明实施例的方法,例如,图1A、图1B、图3所示的方法。
计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的装置或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本发明的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (20)
1.一种耗时确定方法,其特征在于,包括:
通过与主线程异步的监控线程,按照预定时间间隔获取所述主线程进行函数调用的调用链路;
对相邻时间间隔获取的相同的调用链路,进行聚合处理;
确定聚合处理后的各调用链路中各函数调用所需的调用耗时。
2.一种基于采集的调用链路进行调用耗时的确定方法,其特征在于,包括:
利用与主线程异步的监控线程按照预定时间间隔获取所述主线程的方法调用及所述主线程进行所述方法调用的调用链路;
在所述主线程执行完所述方法调用后,聚合相邻所述预定时间间隔获取的相同所述调用链路,得到聚合结果;
基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时;
基于所述调用耗时输出调用状况信息。
3.根据权利要求2所述的方法,其特征在于,所述利用与主线程异步的监控线程按照预定时间间隔获取所述主线程调用的方法进行采集,获得所述主线程的调用链路,包括:
利用所述监控线程按照预定时间间隔采集主线程的堆栈,获得所述主线程的调用链路,其中,所述堆栈内包含所述主线程的调用方法的调用信息。
4.根据权利要求2或3所述的方法,其特征在于,所述基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时,包括:
将一个所述调用方法所对应所述预定时间间隔累加,获得所述调用耗时。
5.根据权利要求2或3所述的方法,其特征在于,所述基于所述调用耗时输出调用状况信息,还包括:
基于所述聚合结果和所述调用耗时,生成以调用方法和调用耗时为节点的树状结构;
遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息;
将所述调用状况信息返回给服务端。
6.根据权利要求5所述的方法,其特征在于,所述调用状况信息包括以下至少之一:
调用链路所包含调用方法的方法数字地址;
调用方法的方法数字地址。
7.根据权利要求6所述的方法,其特征在于,所述方法数字地址用于服务端符号化后进行问题分析和定位。
8.根据权利要求5所述的方法,其特征在于,所述遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息,包括:
遍历所述树状结构,获得所述主线程执行预定任务的调用耗时最大的调用链路和/或调用方法。
9.一种耗时确定方法,其特征在于,包括:
确定待监控的函数;
通过与主线程异步的监控线路,获取函数的调用链路;
基于获取的函数的调用链路,确定函数调用耗时。
10.一种耗时确定装置,其特征在于,包括:
第一获取模块,用于通过与主线程异步的监控线程,按照预定时间间隔获取所述主线程进行函数调用的调用链路;
第一聚合模块,用于对相邻时间间隔获取的相同的调用链路,进行聚合处理;
确定模块,用于确定聚合处理后的各调用链路中各函数调用所需的调用耗时。
11.一种基于采集的调用链路进行调用耗时的确定装置,其特征在于,包括:
第二获取模块,用于利用与主线程异步的监控线程按照预定时间间隔获取所述主线程的方法调用及所述主线程进行所述方法调用的调用链路;
第二聚合模块,用于在所述主线程执行完所述方法调用后,聚合相邻所述预定时间间隔获取的相同所述调用链路,得到聚合结果;
统计模块,用于基于所述聚合结果,统计所述调用链路中各调用方法的调用耗时;
输出模块,用于基于所述调用耗时输出调用状况信息。
12.根据权利要求11所述的装置,其特征在于,所述第二获取模块,具体用于利用所述监控线程按照预定时间间隔采集主线程的堆栈,获得所述主线程的调用链路,其中,所述堆栈内包含所述主线程的调用方法的调用信息。
13.根据权利要求11或12所述的装置,其特征在于,所述统计模块,具体用于将一个所述调用方法所对应所述预定时间间隔累加,获得所述调用耗时。
14.根据权利要求11或12所述的装置,其特征在于,所述输出模块,具体用于基于所述聚合结果和所述调用耗时,生成以调用方法和调用耗时为节点的树状结构;遍历所述树状结构,获得所述主线程执行所述预定任务的耗时产生预定影响的调用状况信息;将所述调用状况信息返回给服务端。
15.根据权利要求14所述的装置,其特征在于,所述调用状况信息包括以下至少之一:
调用链路所包含调用方法的方法数字地址;
调用方法的方法数字地址。
16.根据权利要求15所述的装置,其特征在于,所述方法数字地址用于服务端符号化后进行问题分析和定位。
17.根据权利要求14所述的装置,其特征在于,所述输出模块,具体用于遍历所述树状结构,获得所述主线程执行预定任务的调用耗时最大的调用链路和/或调用方法。
18.一种耗时确定装置,其特征在于,包括:
监测模块,用于确定待监控的函数;
第一获取模块,用于通过与主线程异步的监控线路,获取函数的调用链路;
确定模块,用于基于获取的函数的调用链路,确定函数调用耗时。
19.一种存储介质,其特征在于,所述存储介质存储计算机程序指令,所述计算机程序指令根据权利要求1至9中任一项所述的方法进行执行。
20.一种计算设备,其特征在于,包括:用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述计算设备执行权利要求1至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910492291.3A CN112052078A (zh) | 2019-06-06 | 2019-06-06 | 一种耗时的确定方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910492291.3A CN112052078A (zh) | 2019-06-06 | 2019-06-06 | 一种耗时的确定方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112052078A true CN112052078A (zh) | 2020-12-08 |
Family
ID=73608846
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910492291.3A Pending CN112052078A (zh) | 2019-06-06 | 2019-06-06 | 一种耗时的确定方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052078A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559231A (zh) * | 2020-12-15 | 2021-03-26 | 北京百度网讯科技有限公司 | 应用检测方法、装置、设备以及存储介质 |
CN112764990A (zh) * | 2021-01-12 | 2021-05-07 | 北京自如信息科技有限公司 | 一种目标进程的监控方法、装置及计算机设备 |
CN113742177A (zh) * | 2021-09-10 | 2021-12-03 | 掌阅科技股份有限公司 | 应用性能监测方法、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371900A (zh) * | 2015-07-23 | 2017-02-01 | 腾讯科技(深圳)有限公司 | 一种实现异步调用的数据处理方法及装置 |
CN107480029A (zh) * | 2017-08-02 | 2017-12-15 | 北京深思数盾科技股份有限公司 | 一种函数调用时间的监控方法及装置 |
CN108549600A (zh) * | 2018-03-29 | 2018-09-18 | 珠海市魅族科技有限公司 | 一种性能分析方法及装置、服务器和可读存储介质 |
CN108595319A (zh) * | 2018-03-30 | 2018-09-28 | 阿里巴巴集团控股有限公司 | 函数选取方法和服务器 |
CN109840177A (zh) * | 2017-11-24 | 2019-06-04 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
-
2019
- 2019-06-06 CN CN201910492291.3A patent/CN112052078A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371900A (zh) * | 2015-07-23 | 2017-02-01 | 腾讯科技(深圳)有限公司 | 一种实现异步调用的数据处理方法及装置 |
CN107480029A (zh) * | 2017-08-02 | 2017-12-15 | 北京深思数盾科技股份有限公司 | 一种函数调用时间的监控方法及装置 |
CN109840177A (zh) * | 2017-11-24 | 2019-06-04 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
CN108549600A (zh) * | 2018-03-29 | 2018-09-18 | 珠海市魅族科技有限公司 | 一种性能分析方法及装置、服务器和可读存储介质 |
CN108595319A (zh) * | 2018-03-30 | 2018-09-28 | 阿里巴巴集团控股有限公司 | 函数选取方法和服务器 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559231A (zh) * | 2020-12-15 | 2021-03-26 | 北京百度网讯科技有限公司 | 应用检测方法、装置、设备以及存储介质 |
CN112559231B (zh) * | 2020-12-15 | 2023-10-03 | 北京百度网讯科技有限公司 | 应用检测方法、装置、设备以及存储介质 |
CN112764990A (zh) * | 2021-01-12 | 2021-05-07 | 北京自如信息科技有限公司 | 一种目标进程的监控方法、装置及计算机设备 |
CN112764990B (zh) * | 2021-01-12 | 2021-11-16 | 北京自如信息科技有限公司 | 一种目标进程的监控方法、装置及计算机设备 |
CN113742177A (zh) * | 2021-09-10 | 2021-12-03 | 掌阅科技股份有限公司 | 应用性能监测方法、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3425524A1 (en) | Cloud platform-based client application data calculation method and device | |
US8464221B2 (en) | Visualization tool for system tracing infrastructure events | |
US8037457B2 (en) | Method and system for generating and displaying function call tracker charts | |
US8555259B2 (en) | Verifying function performance based on predefined count ranges | |
US20100153431A1 (en) | Alert triggered statistics collections | |
US20080127108A1 (en) | Common performance trace mechanism | |
CN112052078A (zh) | 一种耗时的确定方法和装置 | |
US9442817B2 (en) | Diagnosis of application server performance problems via thread level pattern analysis | |
US11288245B2 (en) | Telemetry definition system | |
CN112307057A (zh) | 数据的处理方法及装置、电子设备、计算机存储介质 | |
CN102999314A (zh) | 立即延迟跟踪器工具 | |
US10789230B2 (en) | Multidimensional application monitoring visualization and search | |
US20210173761A1 (en) | Telemetry system extension | |
US10411969B2 (en) | Backend resource costs for online service offerings | |
US20170286262A1 (en) | Tagged tracing, logging and performance measurements | |
CN110334013B (zh) | 决策引擎的测试方法、装置及电子设备 | |
Ousterhout | Always measure one level deeper | |
CN111314158B (zh) | 大数据平台监控方法、装置及设备、介质 | |
Islam et al. | Exploring the capabilities of the new MPI_T interface | |
US20180219752A1 (en) | Graph search in structured query language style query | |
CN111435327B (zh) | 一种日志记录的处理方法、装置及系统 | |
CN113225218A (zh) | 一种话单质量的核查方法和装置 | |
Feng et al. | A memory capacity model for high performing data-filtering applications in samza framework | |
CN111368104A (zh) | 信息处理方法、装置及设备 | |
US20130006568A1 (en) | Test Operation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |