CN114691399A - 应用程序卡顿数据获取方法、装置、设备及存储介质 - Google Patents
应用程序卡顿数据获取方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114691399A CN114691399A CN202011621930.0A CN202011621930A CN114691399A CN 114691399 A CN114691399 A CN 114691399A CN 202011621930 A CN202011621930 A CN 202011621930A CN 114691399 A CN114691399 A CN 114691399A
- Authority
- CN
- China
- Prior art keywords
- information
- application program
- tracking
- file
- trace
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
- G06F11/0787—Storage of error reports, e.g. persistent data storage, storage using memory protection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开实施例提供一种应用程序卡顿数据获取方法、装置、设备及存储介质,通过获取应用程序的跟踪信息,跟踪信息用于表征在应用程序运行过程中与应用程序相关的耗时信息;将跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,跟踪文件用于对应用程序进行卡顿分析;将跟踪文件上传至服务器,实现远程获取终端设备内的用于分析应用程序卡顿的卡顿数据。由于在获取跟踪文件时,是通过在用户态下将跟踪信息缓存至预设位置后实现的,因此可以避免通过内核态进行I/O操作缓存跟踪信息而导致的时的延迟问题,从而提高应用程序运行时的流畅度。
Description
技术领域
本公开实施例涉及计算机与网络通信技术领域,尤其涉及一种应用程序卡顿数据获取方法、装置、设备及存储介质。
背景技术
对于应用程序(Application,APP)产品而言,程序运行的流畅度,是评价其质量高低的重要因素,在APP产品的不断升级和版本迭代过程中,产品开发者会针对APP产品中出现的卡顿问题进行数据采集和定位,以终端设备运行其APP产品时出现的卡顿现象。
现有技术中,APP产品开发者会通过终端设备会监测应用程序的卡顿,并采集相关的跟踪信息进行分析,然而,终端设备在采集到跟踪信息后,是基于异常的处理方式进行信息处理的,因此采集到的跟踪信息,需要在内核态下进行写入处理。
然而,由于运行应用程序的线程在内核态进行输入/输出(Input/Output,I/O)操作存在延迟问题,因此会引发应用程序出现卡顿的问题。
发明内容
本公开实施例提供一种应用程序卡顿数据获取方法、装置、设备及存储介质,以克服监测应用程序卡顿过程中出现的卡顿问题。
第一方面,本公开实施例提供一种应用程序卡顿数据获取方法,包括:
获取应用程序的跟踪信息,所述跟踪信息用于表征在所述应用程序运行过程中与所述应用程序相关的耗时信息;
将所述跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,所述跟踪文件用于对所述应用程序进行卡顿分析;
将所述跟踪文件上传至服务器。
第二方面,本公开实施例提供一种应用程序卡顿数据获取装置,包括:
获取单元,用于获取应用程序的跟踪信息,所述跟踪信息用于表征在所述应用程序运行过程中与所述应用程序相关的耗时信息;
缓存单元,用于将所述跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,所述跟踪文件用于对所述应用程序进行卡顿分析;
收发单元,用于将所述跟踪文件上传至服务器。
第三方面,本公开实施例提供一种电子设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的应用程序卡顿数据获取方法。
第四方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的应用程序卡顿数据获取方法。
本实施例提供的应用程序卡顿数据获取方法、装置、设备及存储介质,通过获取应用程序的跟踪信息,所述跟踪信息用于表征在所述应用程序运行过程中与所述应用程序相关的耗时信息;将所述跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,所述跟踪文件用于对所述应用程序进行卡顿分析;将所述跟踪文件上传至服务器,实现远程获取终端设备内的用于分析应用程序卡顿的卡顿数据。由于在获取跟踪文件时,是通过在用户态下将跟踪信息缓存至预设位置后实现的,因此可以避免通过内核态进行I/O操作缓存跟踪信息而导致的时的延迟问题,从而提高应用程序运行时的流畅度。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种应用场景示意图;
图2为现有技术中一种获取卡顿数据的过程示例图;
图3为本公开实施例提供的应用程序卡顿数据获取方法流程示意图一;
图4为图3所示实施例中步骤S102的流程图;
图5为本公开实施例中步骤S102的实现过程示意图;
图6为本公开实施例提供的应用程序卡顿数据获取方法流程示意图二;
图7为本公开实施例提供的一种应用程序卡顿数据获取装置的结构框图;
图8为本公开实施例提供的电子设备的硬件结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
首先对本申请所涉及的名词进行解释:
跟踪信息,即trace信息,是在应用程序出现异常时,操作系统对异常发生时对应进程进行跟踪追溯的信息,该信息记录了异常发生时进程的堆栈及虚拟机的一些状态信息,操作系统对此类trace信息进行保存,形成跟踪(trace)文件,例如,安卓系统中的traces.txt文件,会记录应用程序发生无响应(Application Not Responding,ANR)事件时当前进程的相关信息。根据trace文件中记录的trace信息,可以实现对应用程序出现的卡顿问题的分析和定位,以优化应用程序的运行流畅度。
内核态和用户态,内核态和用户态是操作系统的两种运行级别,内核态权限高,用户态权限低,通过内核态和用户态,可以有效实现中央处理器(Central Processing Unit,CPU)的权限分级和数据隔离,内核态对应的进程为内核进程,用户态对应的进程为用户进程,出于安全考虑,用户进程是受限的,它不能随意访问资源、获取资源。内核进程负责管理和分配资源,它具有最高权限,而用户进程使用被分配的资源。其中,当CPU在执行运行在用户态下的程序时,发生了一些没有预知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关进程中,也就是切换到了内核态。
下面对本公开实施例的应用场景进行解释:
图1为本公开实施例提供的一种应用场景示意图,参考图1所示,本公开实施例提供的应用程序卡顿数据获取方法可以应用在终端设备上,例如智能手机。终端设备上安装并运行有应用程序(APP)客户端。为了提高应用程序运行的流畅度,给应用程序的应用用户提供更好的使用体验,设置在服务器中,与应用程序客户端通信连接的服务端会收集客户端上传的用于记录应用程序出现的卡顿情况的卡顿数据,具体地,例如应用程序客户端可以根据预设的计划信息,定时上传卡顿数据至服务器,也可以根据接收到的指令信息,上传卡顿数据至服务器。应用程序的开发用户通过服务器内的卡顿数据,进行分析,定位应用程序出现卡顿的原因,从而对应用程序进行优化,减少卡顿,提高应用程序的运行流畅度。
图2为现有技术中一种获取卡顿数据的过程示例图。参考图2,现有技术中,对应用程序进行卡顿分析,是通过获取应用程序运行过程中,与应用程序相关的函数的调用耗时,以确定长耗时的函数,实现应用程序中卡顿原因的定位。因此,卡顿数据中包含表征应用程序相关的函数的调用耗时的信息,以安卓系统为例,用于表征应用程序中各函数调用耗时的信息为atrace信息,现有技术中获取卡顿数据的过程中,需要调用写系统(write)函数,将atrace信息写入预设示踪标识描述(trace_mark_fd)文件中,从而生成卡顿数据。该过程需要线程切换至内核态下完成,而切换至内核态进行I/O操作的过程中,对于性能较差的设备,会导致出现读写延迟,进而影响应用程序的流程运行,出现卡顿。本公开实施例提供一种应用程序卡顿数据获取方法以解决上述问题。
参考图3,图3为本公开实施例提供的应用程序卡顿数据获取方法流程示意图一。本实施例的方法可以应用在终端设备中,该应用程序卡顿数据获取方法包括:
步骤S101:获取应用程序的跟踪信息,跟踪信息用于表征在应用程序运行过程中与应用程序相关的耗时信息。
示例性地,以安卓系统为例,跟踪(trace)信息例如为应用程序发生ANR事件时的堆栈信息,更具体的,如atrace信息,atrace信息是指通过安卓中的atrace函数获取的本地服务层(native)与应用程序相关的耗时信息,通过为atrace函数配置不同的执行参数,可以获得对应的atrace信息。此处不对atrace函数的使用方法及atrace信息的具体获取方法进行赘述。
示例性地,trace信息还包括系统信息,系统信息表征操作系统中函数的调用耗时。系统信息可以通过系统性能追踪工具获取,例如systrace程序,此处不对此过程进行赘述。
步骤S102,将跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,跟踪文件用于对应用程序进行卡顿分析。
示例性地,如图4所示,步骤S102包括以下三个具体的实施步骤:
S1021,拦截应用程序的缓存操作,其中,缓存操作用于表征应用程序通过执行内核代码存储跟踪信息。
具体的,trace信息在在应用程序出现异常时,所保存的异常发生时刻的堆栈信息,现有技术中将trace信息缓存为trace文件的方式,是切换为内核态,通过执行内核代码写入一个预设的文件trace_mark_fd,生成trace文件。本实施例中,在应用程序将该trace信息存为trace文件的过程中,拦截该缓存操作,即不切换为内核态,而是在用户态下将trace信息保存在预设的位置,更加具体地,该过程可以通过钩子(hook)函数拦截write函数的输入数据,从而实现避免切换为内核态对trace信息进行处理的过程。
S1022,将跟踪信息,通过异步线程发送至预设的用户态缓存区。
进一步地,在将trace信息拦截下来后,将该trace信息发送至预设的用户态缓存区,该过程可以在用户态下实现,不需要切换为内核态。其中,示例性地,终端设备中设置有环形缓存区(ringbuffer)。在该将拦截下来的trace信息首先发送至ringbuffer中,不同的trace信息被依次写入ringbuffer中,直至该ringbuffer中的缓存数据达到预设的数量水平,再对ringbuffer中的数据进行整体发送,由于该过程始终运行在用户态下,因此避免了多次频繁的调用内核线程,降低了内核资源的浪费。
进一步地,在ringbuffer中缓存的trace信息达到预设数据量后,将ringbuffer中的数据通过异步线程发送至用户态缓存区进行缓存。示例性地,用户态缓存区通过安卓系统中的流写操作(ofstream)类实现。
示例性地,在通过异步线程发送至预设的用户态缓存区之前,还包括:获取输入输出接口信息和锁信息,输入输出接口信息用于表征线程对trace_marker_fd文件的输入输出状态;锁信息用于表征线程对trace_marker_fd文件的持有状态。示例性地的,还包括:获取处于睡眠(sleep)状态的trace信息,其中,处于sleep状态的trace信息是指atrace中没有的I/O耗时,Binder耗时等导致线程处于Sleep(Sleep or Uninterruptible Sleep)状态的trace信息。
相应的,将I/O接口信息、锁信息、处于sleep状态的trace信息,通过异步线程发送至用户态缓存区。本实施例步骤中,通过获取I/O接口信息、锁信息和处于sleep状态的trace信息,进一步丰富用于定位应用程序卡顿问题的trace信息,是生成的trace文件中包含更多用于指示卡顿问题的信息,提高数据的有效性。
S1023,在确定用户态缓存区的数据写入量大于或等于预设缓存阈值时,将用户态缓存区内的数据写入预设位置,以生成跟踪文件。
在该用户态缓存区的数据写入量大于或等于预设缓存阈值时,例如,大于或等于缓存区最大写入量的90%,将用户态缓存区中的数据保存在预设的本地存储位置,此时,需要调用write函数,生成对应的跟踪文件。
在现有技术中,通过切换为内核态,并执行内核代码写入一个预设的文件trace_mark_fd,生成trace文件的过程中,当多线程向描述trace_mark_fd文件的属性的regular文件做I/O读写操作的时候,都会持有该regular文件的占位(position)锁,即f_pos_lock锁,该position锁用于保证线程写入trace信息的顺序。在低内存等工况下,I/O读写操作的延迟较高,导致一旦出现某一线程无法及时完成对应的I/O读写操作,则其他线程则必须进行等待,因此,例如用户界面(User Interface,UI)线程此时也需要操作同一文件,则会导致争用f_pos_lock锁的情况发生,进而导致程序出现卡顿。图5为本公开实施例中步骤S102的实现过程示意图,参考图5,而本申请步骤中,通过拦截应用程序向trace_mark_fd写入trace信息,并将该trace信息缓存在ringbuffer中,并通过ringbuffer写入用户态缓存区,从而生成单独的跟踪文件,即卡顿数据,使写入操作的耗时降低,提高系统处理trace信息的效率,减少应用程序的卡顿现象。
步骤S103,将跟踪文件上传至服务器。
示例性地,在终端设备本地生成跟踪文件后,可以根据将跟踪文件上传至服务器,以供应用程序的开发用户对跟踪文件进行分析,实现对应用程序卡顿问题的定位。
其中,在一种可能的实现方式中,终端设备可以根据预设的配置参数,定时向服务器上传该跟踪文件,例如每天、每周上传一次跟踪文件。也可以终端设备判断应用程序出现卡顿现象后,向服务器上传对应的跟踪文件。
在另一种可能的实现方式中,终端设备在接收上传指令后,向服务器发送该跟踪文件,其中,该上传指令可以是用户直接向终端设备输入的,也可以是应用程序按照预设规则生成的,也可以是服务器向终端设备发送的,此处不进行具体限定。
在本实施例中,通过获取应用程序的跟踪信息,跟踪信息用于表征在应用程序运行过程中与应用程序相关的耗时信息;将跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,跟踪文件用于对应用程序进行卡顿分析;将跟踪文件上传至服务器,实现远程获取终端设备内的用于分析应用程序卡顿的卡顿数据。由于在获取跟踪文件时,是通过在用户态下将跟踪信息缓存至预设位置后实现的,因此可以避免通过内核态进行I/O操作缓存跟踪信息而导致的时的延迟问题,从而提高应用程序运行时的流畅度。
参考图6,图6为本公开实施例提供的应用程序卡顿数据获取方法流程示意图二。本实施例中详细描述了获取应用程序的跟踪信息的过程,该应用程序卡顿数据获取方法包括:
S201,接收调用指令,调用指令用于指示终端设备开始实时获取应用程序的跟踪信息。
示例性地,调用指令是用于开始收集应用程序trace信息功能的指令,具体的,在终端设备未接到该调用指令时,不对应用程序的trace信息进行收集,以降低系统的负载,节省计算资源,而当终端设备接收到该调用指令后,则开始对应用程序的trace信息进行收集。进一步地,该调用指令可以是用户直接通过终端设备输入,或者应用程序根据需要向终端设备发出的;也可以是服务器向终端设备发送的。通过调用指令控制生成卡顿数据的功能开启或关闭。在一个更具体的实施例中,调用指令中包括执行脚本,通过该执行脚本,通过dlopen方式从libcutils.so库中找到atrace_enabled_tags项,并将其值(value)设置为1,开启获取追踪信息的功能。
S202,接收调用指令后,获取第一状态信息和第二状态信息,其中,第一状态信息表征应用程序的函数的调用耗时,第二状态信息表征操作系统中函数的调用耗时。
示例性地,第一状态信息为对应应用程序内函数的trace信息,例如函数a的调用耗时,函数b的调用耗时。通过应用程序内各函数的调用耗时的长短,可以实现对程序卡顿的定位。具体地,在一种可能的实现方式中,获取第一状态信息的方法可以包括:
S2021:通过在应用程序中动态插桩,获取应用程序运行时各函数的开始时间和结束时间。
S2022:根据各函数分别对应的开始时间和结束时间,确定第一状态信息。
具体地,通过在应用程序中进行动态插桩,当程序运行到桩函数时,能够获得一个对应的时间信息,用以描述对应的函数的开始时间和结束时间。通过对开始时间和结束时间的时间间隔进行计算,可以确定对应的函数的运行耗时,即第一状态信息。
示例性地,第二状态信息为系统级的trace信息,该系统级的trace信息可以通过系统性能追踪工具来收集,例如systrace程序。其中,systrace程序为是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集安卓关键子系统的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。此处不对systrace的具体原理及使用方法进行赘述。
具体地,在一种可能的实现方式中,获取第二状态信息的方法可以包括:
S2023,通过系统性能追踪工具收集预设的自定义信息和输入输出接口信息。
S2024,根据自定义信息和输入输出接口信息,生成第二状态信息。
其中,自定义信息是指用户根据需要,自定义设置的trace信息,例如系统的I/O操作、内核工作队列、CPU负载以及安卓各个子系统的运行状况等,此处不对此进行具体限定。输入输出接口信息即为I/O信息,用于表征与I/O相关的trace信息。上述信息均可以通过系统性能追踪工具程序收集而获得。之后,将收集的自定义信息和输入输出接口信息,确定为第二状态信息,用以标准操作系统中函数的调用耗时。
S203,通过预设在写系统调用位置的钩子函数,拦截应用程序向trace_marker_fd文件写入的第一状态信息和第二状态信息,并将第一状态信息和第二状态信息写入环形内存缓存区。
示例性地,按照系统预设的异常处理方法,当应用程序获得包括第一状态信息和第二状态信息的trace信息后,线程会进入内核态,通过write函数将trace信息写入trace_marker_fd文件。本实施例中,通过设置钩子函数,在应用程序向trace_marker_fd文件写入的第一状态信息和第二状态信息时,hook write函数的系统调用,改变数据流的走向,将第一状态信息和第二状态信息写入一个预设的ringbuffer。同时,额外收集I/O,锁相关等trace信息,用于分析sleep状态,并将该I/O,锁相关等trace信息共同缓存入ringbuffer。
S204,将预设的待写入文件映射到ofstream类对应的用户态缓冲区。
示例性地,ofstream是一个用于将内存中的数据写入磁盘的类,具体的,首先通过ofstream类的构造函数构造一个文件输出流对象文件,即待写入文件,并将该文件设置在对应的用户态缓冲器内,完成待写入文件的映射过程。
S205,通过异步线程将环形内存缓存区中的跟踪信息写入用户态缓存区,当用户态缓冲区的数据写入量大于或等于预设缓存阈值时,将用户态缓冲区中的数据刷新至对应的待写入文件,以生成跟踪文件。
示例性地,在ringbuffer中的trace信息达到预设数量后,一次性的将ringbuffer中的数据通过异步线程(async thread)写入ofstream的用户态缓存区内,当ofstream的用户态缓存区的数据写入量大于或等于预设缓存阈值时,例如,大于用户态缓冲区最大存储量的90%,将用户态缓冲区中的数据刷新至上述构造的待写入文件中,完成将trace信息写入磁盘的目的。
S206,将跟踪文件上传至服务器。
本实施例步骤中,步骤S206的实现方式与图3所示实施例中步骤S103的实现方式相同,详细论述请参考步骤S103的论述,这里不再赘述。
对应于上文实施例的应用程序卡顿数据获取方法,图7为本公开实施例提供的一种应用程序卡顿数据获取装置的结构框图。为了便于说明,仅示出了与本公开实施例相关的部分。参照图7,应用程序卡顿数据获取装置3包括:
获取单元31,用于获取应用程序的跟踪信息,跟踪信息用于表征在应用程序运行过程中与应用程序相关的耗时信息;
缓存单元32,用于将跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,跟踪文件用于对应用程序进行卡顿分析;
收发单元33,用于将跟踪文件上传至服务器。
在本公开的一个实施例中,缓存单元32,具体用于:拦截应用程序的缓存操作,其中,缓存操作用于表征应用程序通过执行内核代码存储跟踪信息;将跟踪信息,通过异步线程发送至预设的用户态缓存区;在确定用户态缓存区的数据写入量大于或等于预设缓存阈值时,将用户态缓存区内的数据写入预设位置,以生成跟踪文件。
在本公开的一个实施例中,缓存单元32在拦截应用程序通过执行内核代码存储跟踪信息的操作时,具体用于:通过预设在写系统调用位置的钩子函数,拦截应用程序向trace_marker_fd文件写入的跟踪信息,并将跟踪信息写入环形内存缓存区;将跟踪信息,通过异步线程发送至预设的用户态缓存区,包括:通过异步线程将环形内存缓存区中的跟踪信息写入用户态缓存区。
在本公开的一个实施例中,用户态缓存区通过ofstream类实现,缓存单元32在确定用户态缓存区的数据写入量大于或等于预设缓存阈值时,将用户态缓存区内的数据写入预设位置,以生成跟踪文件时,具体用于:将预设的待写入文件映射到ofstream类对应的用户态缓冲区;当用户态缓冲区的数据写入量大于或等于预设缓存阈值时,将用户态缓冲区中的数据刷新至对应的待写入文件,以生成跟踪文件。
在本公开的一个实施例中,获取单元31,还用于:获取输入输出接口信息和锁信息,输入输出接口信息用于表征线程对trace_marker_fd文件的输入输出状态;锁信息用于表征线程对trace_marker_fd文件的持有状态;缓存单元32,还用于:将输入输出接口信息、锁信息,通过异步线程发送至用户态缓存区。
在本公开的一个实施例中,跟踪信息包括第一状态信息,第一状态信息表征应用程序的函数的调用耗时,获取单元31,具体用于:通过在应用程序中动态插桩,获取应用程序运行时各函数的开始时间和结束时间;根据各函数分别对应的开始时间和结束时间,确定第一状态信息。
在本公开的一个实施例中,跟踪信息还包括第二状态信息,第二状态信息表征操作系统中函数的调用耗时,获取单元31,具体用于:通过系统性能追踪工具收集预设的自定义信息和输入输出接口信息;根据自定义信息和输入输出接口信息,生成第二状态信息。
在本公开的一个实施例中,收发单元33还用于:接收调用指令,调用指令用于指示终端设备开始实时获取应用程序的跟踪信息;获取单元31,具体用于:在接收调用指令后,实时获取应用程序的跟踪信息。
在本公开的一个实施例中,收发单元33还用于:接收上传指令,上传指令用于指示终端设备将跟踪文件上传至服务器。
其中,获取单元31、缓存单元32和收发单元33依次连接。本实施例提供的应用程序卡顿数据获取装置3可以执行如图3-图5所示的方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
参考图8,其示出了适于用来实现本公开实施例的电子设备900的结构示意图,该电子设备900可以为终端设备或服务器。其中,终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal Digital Assistant,简称PDA)、平板电脑(Portable Android Device,简称PAD)、便携式多媒体播放器(Portable MediaPlayer,简称PMP)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图8示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图8所示,电子设备900可以包括处理装置(例如中央处理器、图形处理器等)901,其可以根据存储在只读存储器(Read Only Memory,简称ROM)902中的程序或者从存储装置908加载到随机访问存储器(Random Access Memory,简称RAM)903中的程序而执行各种适当的动作和处理。在RAM 903中,还存储有电子设备900操作所需的各种程序和数据。处理装置901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
通常,以下装置可以连接至I/O接口905:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置906;包括例如液晶显示器(Liquid CrystalDisplay,简称LCD)、扬声器、振动器等的输出装置907;包括例如磁带、硬盘等的存储装置908;以及通信装置909。通信装置909可以允许电子设备900与其他设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的电子设备900,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置909从网络上被下载和安装,或者从存储装置908被安装,或者从ROM 902被安装。在该计算机程序被处理装置901执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述实施例所示的方法。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LocalArea Network,简称LAN)或广域网(Wide Area Network,简称WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
第一方面,根据本公开的一个或多个实施例,提供了一种应用程序卡顿数据获取方法,包括:获取应用程序的跟踪信息,跟踪信息用于表征在应用程序运行过程中与应用程序相关的耗时信息;将跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,跟踪文件用于对应用程序进行卡顿分析;将跟踪文件上传至服务器。
根据本公开的一个或多个实施例,将跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,包括:拦截应用程序的缓存操作,其中,缓存操作用于表征应用程序通过执行内核代码存储跟踪信息;将跟踪信息,通过异步线程发送至预设的用户态缓存区;在确定用户态缓存区的数据写入量大于或等于预设缓存阈值时,将用户态缓存区内的数据写入预设位置,以生成跟踪文件。
根据本公开的一个或多个实施例,拦截应用程序通过执行内核代码存储跟踪信息的操作,包括:通过预设在写系统调用位置的钩子函数,拦截应用程序向示踪标识描述文件写入的跟踪信息,并将跟踪信息写入环形内存缓存区;将跟踪信息,通过异步线程发送至预设的用户态缓存区,包括:通过异步线程将环形内存缓存区中的跟踪信息写入用户态缓存区。
根据本公开的一个或多个实施例,用户态缓存区通过流写操作类实现,在确定用户态缓存区的数据写入量大于或等于预设缓存阈值时,将用户态缓存区内的数据写入预设位置,以生成跟踪文件,包括:将预设的待写入文件映射到流写操作类对应的用户态缓冲区;当用户态缓冲区的数据写入量大于或等于预设缓存阈值时,将用户态缓冲区中的数据刷新至对应的待写入文件,以生成跟踪文件。
根据本公开的一个或多个实施例,方法还包括:获取输入输出接口信息和锁信息,输入输出接口信息用于表征线程对示踪标识描述文件的输入输出状态;锁信息用于表征线程对示踪标识描述文件的持有状态;方法,还包括:将输入输出接口信息、锁信息,通过异步线程发送至用户态缓存区。
根据本公开的一个或多个实施例,跟踪信息包括第一状态信息,第一状态信息表征应用程序的函数的调用耗时,获取应用程序的跟踪信息,包括:通过在应用程序中动态插桩,获取应用程序运行时各函数的开始时间和结束时间;根据各函数分别对应的开始时间和结束时间,确定第一状态信息。
根据本公开的一个或多个实施例,跟踪信息还包括第二状态信息,第二状态信息表征操作系统中函数的调用耗时,获取应用程序的跟踪信息,还包括:通过系统性能追踪工具收集预设的自定义信息和输入输出接口信息;根据自定义信息和输入输出接口信息,生成第二状态信息。
根据本公开的一个或多个实施例,方法还包括:接收调用指令,调用指令用于指示终端设备开始实时获取应用程序的跟踪信息;获取应用程序的跟踪信息,包括:在接收调用指令后,实时获取应用程序的跟踪信息。
根据本公开的一个或多个实施例,方法还包括:接收上传指令,上传指令用于指示终端设备将跟踪文件上传至服务器。
第二方面,根据本公开的一个或多个实施例,提供了一种应用程序卡顿数据获取装置,包括:
获取单元,用于获取应用程序的跟踪信息,跟踪信息用于表征在应用程序运行过程中与应用程序相关的耗时信息;
缓存单元,用于将跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,跟踪文件用于对应用程序进行卡顿分析;
收发单元,用于将跟踪文件上传至服务器。
根据本公开的一个或多个实施例,缓存单元,具体用于:拦截应用程序的缓存操作,其中,缓存操作用于表征应用程序通过执行内核代码存储跟踪信息;将跟踪信息,通过异步线程发送至预设的用户态缓存区;在确定用户态缓存区的数据写入量大于或等于预设缓存阈值时,将用户态缓存区内的数据写入预设位置,以生成跟踪文件。
根据本公开的一个或多个实施例,缓存单元在拦截应用程序通过执行内核代码存储跟踪信息的操作时,具体用于:通过预设在写系统调用位置的钩子函数,拦截应用程序向示踪标识描述文件写入的跟踪信息,并将跟踪信息写入环形内存缓存区;将跟踪信息,通过异步线程发送至预设的用户态缓存区,包括:通过异步线程将环形内存缓存区中的跟踪信息写入用户态缓存区。
根据本公开的一个或多个实施例,用户态缓存区通过流写操作类实现,缓存单元在确定用户态缓存区的数据写入量大于或等于预设缓存阈值时,将用户态缓存区内的数据写入预设位置,以生成跟踪文件时,具体用于:将预设的待写入文件映射到流写操作类对应的用户态缓冲区;当用户态缓冲区的数据写入量大于或等于预设缓存阈值时,将用户态缓冲区中的数据刷新至对应的待写入文件,以生成跟踪文件。
根据本公开的一个或多个实施例,获取单元,还用于:获取输入输出接口信息和锁信息,输入输出接口信息用于表征线程对示踪标识描述文件的输入输出状态;锁信息用于表征线程对示踪标识描述文件的持有状态;缓存单元,还用于:将输入输出接口信息、锁信息,通过异步线程发送至用户态缓存区。
根据本公开的一个或多个实施例,跟踪信息包括第一状态信息,第一状态信息表征应用程序的函数的调用耗时,获取单元,具体用于:通过在应用程序中动态插桩,获取应用程序运行时各函数的开始时间和结束时间;根据各函数分别对应的开始时间和结束时间,确定第一状态信息。
根据本公开的一个或多个实施例,跟踪信息还包括第二状态信息,第二状态信息表征操作系统中函数的调用耗时,获取单元,具体用于:通过系统性能追踪工具收集预设的自定义信息和输入输出接口信息;根据自定义信息和输入输出接口信息,生成第二状态信息。
根据本公开的一个或多个实施例,收发单元还用于:接收调用指令,调用指令用于指示终端设备开始实时获取应用程序的跟踪信息;获取单元,具体用于:在接收调用指令后,实时获取应用程序的跟踪信息。
根据本公开的一个或多个实施例,收发单元还用于:接收上传指令,上传指令用于指示终端设备将跟踪文件上传至服务器。
第三方面,根据本公开的一个或多个实施例,提供了一种电子设备,包括:至少一个处理器和存储器;
存储器存储计算机执行指令;
至少一个处理器执行存储器存储的计算机执行指令,使得至少一个处理器执行如上第一方面以及第一方面各种可能的设计的应用程序卡顿数据获取方法。
第四方面,根据本公开的一个或多个实施例,提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当处理器执行计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计的应用程序卡顿数据获取方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
Claims (12)
1.一种应用程序卡顿数据获取方法,其特征在于,包括:
获取应用程序的跟踪信息,所述跟踪信息用于表征在所述应用程序运行过程中与所述应用程序相关的耗时信息;
将所述跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,所述跟踪文件用于对所述应用程序进行卡顿分析;
将所述跟踪文件上传至服务器。
2.根据权利要求1所述的方法,其特征在于,将所述跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,包括:
拦截所述应用程序的缓存操作,其中,所述缓存操作用于表征所述应用程序通过执行内核代码存储所述跟踪信息;
将所述跟踪信息,通过异步线程发送至预设的用户态缓存区;
在确定所述用户态缓存区的数据写入量大于或等于预设缓存阈值时,将所述用户态缓存区内的数据写入预设位置,以生成跟踪文件。
3.根据权利要求2所述的方法,其特征在于,拦截所述应用程序通过执行内核代码存储所述跟踪信息的操作,包括:
通过预设在写系统调用位置的钩子函数,拦截所述应用程序向示踪标识描述文件写入的跟踪信息,并将所述跟踪信息写入环形内存缓存区;
将所述跟踪信息,通过异步线程发送至预设的用户态缓存区,包括:
通过异步线程将所述环形内存缓存区中的跟踪信息写入所述用户态缓存区。
4.根据权利要求3所述的方法,其特征在于,所述用户态缓存区通过流写操作类实现,在确定所述用户态缓存区的数据写入量大于或等于预设缓存阈值时,将所述用户态缓存区内的数据写入预设位置,以生成跟踪文件,包括:
将预设的待写入文件映射到流写操作类对应的用户态缓冲区;
当所述用户态缓冲区的数据写入量大于或等于预设缓存阈值时,将所述用户态缓冲区中的数据刷新至对应的待写入文件,以生成所述跟踪文件。
5.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取输入输出接口信息和锁信息,所述输入输出接口信息用于表征线程对示踪标识描述文件的输入输出状态;所述锁信息用于表征线程对示踪标识描述文件的持有状态;
所述方法,还包括:
将所述输入输出接口信息、所述锁信息,通过异步线程发送至所述用户态缓存区。
6.根据权利要求1所述的方法,其特征在于,所述跟踪信息包括第一状态信息,所述第一状态信息表征所述应用程序的函数的调用耗时,获取应用程序的跟踪信息,包括:
通过在所述应用程序中动态插桩,获取所述应用程序运行时各函数的开始时间和结束时间;
根据各所述函数分别对应的所述开始时间和所述结束时间,确定所述第一状态信息。
7.根据权利要求6所述的方法,其特征在于,所述跟踪信息还包括第二状态信息,所述第二状态信息表征操作系统中函数的调用耗时,获取应用程序的跟踪信息,还包括:
通过系统性能追踪工具收集预设的自定义信息和输入输出接口信息;
根据所述自定义信息和所述输入输出接口信息,生成第二状态信息。
8.根据权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
接收调用指令,所述调用指令用于指示终端设备开始实时获取所述应用程序的跟踪信息;
获取应用程序的跟踪信息,包括:
在接收调用指令后,实时获取所述应用程序的跟踪信息。
9.根据权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
接收上传指令,所述上传指令用于指示终端设备将所述跟踪文件上传至所述服务器。
10.一种应用程序卡顿数据获取装置,其特征在于,包括:
获取单元,用于获取应用程序的跟踪信息,所述跟踪信息用于表征在所述应用程序运行过程中与所述应用程序相关的耗时信息;
缓存单元,用于将所述跟踪信息在用户态下通过异步线程缓存至预设位置,以生成跟踪文件,其中,所述跟踪文件用于对所述应用程序进行卡顿分析;
收发单元,用于将所述跟踪文件上传至服务器。
11.一种电子设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至9任一项所述的应用程序卡顿数据获取方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至9任一项所述的应用程序卡顿数据获取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011621930.0A CN114691399A (zh) | 2020-12-31 | 2020-12-31 | 应用程序卡顿数据获取方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011621930.0A CN114691399A (zh) | 2020-12-31 | 2020-12-31 | 应用程序卡顿数据获取方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114691399A true CN114691399A (zh) | 2022-07-01 |
Family
ID=82134015
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011621930.0A Pending CN114691399A (zh) | 2020-12-31 | 2020-12-31 | 应用程序卡顿数据获取方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114691399A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024131696A1 (zh) * | 2022-12-20 | 2024-06-27 | 维沃移动通信有限公司 | 卡顿分析方法及其装置 |
-
2020
- 2020-12-31 CN CN202011621930.0A patent/CN114691399A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024131696A1 (zh) * | 2022-12-20 | 2024-06-27 | 维沃移动通信有限公司 | 卡顿分析方法及其装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200334403A1 (en) | System and method for energy usage accounting in software applications | |
US20200057660A1 (en) | Method and system for rendering user interfaces | |
CN109213611B (zh) | 跨进程通讯方法、装置、终端及存储介质 | |
US9298438B2 (en) | Profiling application code to identify code portions for FPGA implementation | |
CN111090536B (zh) | 一种获取内存泄露信息的方法、装置、介质和电子设备 | |
US9170912B1 (en) | System and methods for power and energy modeling in computing devices using system call tracing | |
CN110018914B (zh) | 基于共享内存的消息采集方法及装置 | |
US20210192674A1 (en) | Methods and apparatus to improve operation of a graphics processing unit | |
CN110633190B (zh) | 一种应用程序内存监控方法、装置、设备及存储介质 | |
CN114691448A (zh) | 应用程序卡顿监测方法、装置、设备及存储介质 | |
EP3564898A1 (en) | Apparatus and methods for generating dynamic trace data on a gpu | |
US20220100512A1 (en) | Deterministic replay of a multi-threaded trace on a multi-threaded processor | |
CN109918190A (zh) | 一种数据采集方法及相关设备 | |
CN110597704B (zh) | 应用程序的压力测试方法、装置、服务器和介质 | |
CN109697034B (zh) | 一种数据写入方法、装置、电子设备及存储介质 | |
WO2018022303A1 (en) | Capturing commands in a multi-engine graphics processing unit | |
CN114691399A (zh) | 应用程序卡顿数据获取方法、装置、设备及存储介质 | |
US20160154680A1 (en) | Calibrated timeout interval on a configuration value, shared timer value, and shared calibration factor | |
CN113407344A (zh) | 一种处理卡顿的方法及装置 | |
CN112380088A (zh) | 测试方法、装置和电子设备 | |
CN108197005B (zh) | Ios应用的底层运行性能监测方法、介质、设备及系统 | |
US10496524B2 (en) | Separating test coverage in software processes using shared memory | |
CN113672358B (zh) | 定时任务处理方法及装置、系统、电子设备和存储介质 | |
US11520961B2 (en) | Heterogeneous-computing based emulator | |
CN116149977A (zh) | Sdk测试方法、装置、电子设备及存储介质 |
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 |