CN112860513A - 应用无响应监测方法、装置、设备及存储介质 - Google Patents
应用无响应监测方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112860513A CN112860513A CN202110127202.2A CN202110127202A CN112860513A CN 112860513 A CN112860513 A CN 112860513A CN 202110127202 A CN202110127202 A CN 202110127202A CN 112860513 A CN112860513 A CN 112860513A
- Authority
- CN
- China
- Prior art keywords
- application
- message
- response
- slow
- event
- 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/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开实施例提供一种应用无响应监测方法、装置、设备及存储介质,包括:若监测到应用程序出现应用无响应事件,则获取应用无响应事件对应的历史慢消息,其中,历史慢消息为应用程序运行过程中所产生的、发生在应用无响应事件之前的慢消息,慢消息指示执行耗时大于预设耗时阈值的功能函数;根据应用无响应事件对应的当前消息和历史慢消息生成无响应数据,无响应数据用于确定应用程序出现应用无响应事件的原因,由于历史慢消息可以提供应用无响应事件发生前终端设备的运行情况信息,其中包含了导致应用程序发生应用无响应事件的重要信息,因此,通过当前消息和历史慢消息生成的无响应数据,提高无响应数据的有效性和精准性。
Description
技术领域
本公开实施例涉及计算机与网络通信技术领域,尤其涉及一种应用无响应监测方法、装置、设备及存储介质。
背景技术
应用程序在终端设备内运行时,当出现某一功能函数的调用耗时过长,会导致应用程序无响应(Application Not responding,ANR)事件,造成应用程序运行卡顿,影响使用体验。为了降低应用程序出现无响应的概率,提高应用程序流畅度,需要对应用程序进行相关数据的采集,以定位导致应用程序无响应的原因,并进行优化。
现有技术中,对应用程序无响应进行监测的方案,通常是通过获取应用程序应用无响应事件出现时的内存堆栈信息,进行问题定位。
然而,由于获取的应用程序无响应出现时的内存堆栈信息量较少,且通常具有滞后性,因此无法准确表现导致应用程序无响应的原因,因此导致了获得的无响应数据精准性差,无法实现优化应用程序运行流畅度的目的。
发明内容
本公开实施例提供一种应用无响应监测方法、装置、设备及存储介质,以克服获得的无响应数据精准性差的问题。
第一方面,本公开实施例提供一种应用无响应监测方法,应用于终端设备,所述方法包括:若监测到应用程序出现应用无响应事件,则获取所述应用无响应事件对应的历史慢消息,其中,所述历史慢消息为所述应用程序运行过程中所产生的、发生在所述应用无响应事件之前的慢消息,所述慢消息指示执行耗时大于预设耗时阈值的功能函数;根据所述应用无响应事件对应的当前消息和所述历史慢消息生成无响应数据,所述无响应数据用于确定所述应用程序出现应用无响应事件的原因。
第二方面,本公开实施例提供一种应用无响应监测装置,包括:
获取单元,用于若监测到应用程序出现应用无响应事件,则获取所述应用无响应事件对应的历史慢消息,其中,所述历史慢消息为所述应用程序运行过程中所产生的、发生在所述应用无响应事件之前的慢消息,所述慢消息指示执行耗时大于预设耗时阈值的功能函数;
生成单元,用于根据所述应用无响应事件对应的当前消息和所述历史慢消息生成无响应数据,所述无响应数据用于确定所述应用程序出现应用无响应事件的原因。
第三方面,本公开实施例提供一种电子设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的应用无响应监测方法。
第四方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的应用无响应监测方法。
本实施例提供的应用无响应监测方法、装置、设备及存储介质,通过若监测到应用程序出现应用无响应事件,则获取所述应用无响应事件对应的历史慢消息,其中,所述历史慢消息为所述应用程序运行过程中所产生的、发生在所述应用无响应事件之前的慢消息,所述慢消息指示执行耗时大于预设耗时阈值的功能函数;根据所述应用无响应事件对应的当前消息和所述历史慢消息生成无响应数据,所述无响应数据用于确定所述应用程序出现应用无响应事件的原因,由于历史慢消息可以提供应用无响应事件发生前终端设备的运行情况信息,其中包含了导致应用程序发生应用无响应事件的重要信息,因此,通过当前消息和历史慢消息生成的无响应数据,提高无响应数据的有效性和精准性,可以为应用无响应事件的分析提供更加丰富的数据支持。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种应用场景示意图;
图2为现有技术中一种应用无响应监测的过程示例图;
图3为本公开实施例提供的应用无响应监测方法流程示意图一;
图4为本公开实施例提供的一种生成无响应数据的过程示意图;
图5为本公开实施例提供的应用无响应监测方法流程示意图二;
图6为图5所示实施例中步骤S201的流程示意图;
图7为本公开实施例提供的一种确定历史慢消息的示意图;
图8为本公开实施例提供的一种应用无响应监测装置的结构框图;
图9为本公开实施例提供的另一种应用无响应监测装置的结构框图;
图10为本公开实施例提供的电子设备的硬件结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
首先对本申请所涉及的名词进行解释:
应用程序无响应,应用程序无响应(Application Not Responding,ANR),又称应用无响应,是指在对应用程序输入指令或请求后,在一段特定时间内没有得到响应或无法完成的情况。以安卓(Android)系统为例,应用程序响应由工作流管理器(ActivityManager)和窗口管理器(Window Manager)系统服务进行监视。ANR则是Android的一种自我保护措施,当主线程出现卡顿时候,Android系统会给用户一个弹出提示,让用户手动选择继续等待还是强制关闭此APP。
下面对本公开实施例的应用场景进行解释:
图1为本公开实施例提供的一种应用场景示意图,参考图1所示,本公开实施例提供的应用无响应监测方法可以应用在终端设备上,例如智能手机。终端设备上安装并运行有应用程序(APP)客户端。为了提高应用程序运行的流畅度,给应用程序的应用用户提供更好的使用体验,终端设备会对应用程序的运行状态进行监测,当应用程序出现ANR事件时,终端设备会收集无响应数据,并通过应用程序客户端上传至服务器。例如应用程序客户端可以根据预设的计划信息,定时上传无响应数据至服务器,也可以在监测应用程序出现卡顿后,或者根据接收到的指令信息后,实时上传无响应数据至服务器。应用程序的开发者通过对服务器内的无响应数据进行分析,定位应用程序出现卡顿的原因,从而对应用程序进行优化,减少卡顿,提高应用程序的运行流畅度。
图2为现有技术中一种应用无响应监测的过程示例图。参考图2,现有技术中,对应用程序进行无响应监测的方案,是在监测到ANR事件之后,抓取对应的消息堆栈信息,然而,在实际实时过程中,消息堆栈抓取的过程存在延迟,在监测到ANR事件之后导致抓取到的消息堆栈并非ANR发生时的准确消息堆栈,而是延迟消息堆栈,因此,抓取的堆栈信息存在准确性低的问题。同时,在另一种情况中,在监测到ANR事件之后,即使抓取对应的消息堆栈时的延迟较小,获得了ANR事件对应的较为准确的消息堆栈,然而,造成应用程序出现ANR的原因,并非只源于ANR出现时刻的慢消息,更可能是在出现ANR事件之前的一段时间内,由于应用程序内部的函数调用或系统函数调用过程中出现的问题,导致了ANR事件。因此,只获取ANR事件发生时刻的消息堆栈,而未获ANR事件之前的历史慢消息对应的历史消息堆栈,导致了抓取的堆栈信息的信息量过少的问题。进而,导致了监测到的无响应数据无法实现对应用程序的ANR事件的准确定位。
本公开实施例提供一种应用无响应监测方法以解决上述问题。
图3为本公开实施例提供的应用无响应监测方法流程示意图一。本实施例的方法可以应用在终端设备中,例如智能手机,该应用无响应监测方法包括:
步骤S101:若监测到应用程序出现应用无响应事件,则获取应用无响应事件对应的历史慢消息,其中,历史慢消息为应用程序运行过程中所产生的、发生在应用无响应事件之前的慢消息,慢消息指示执行耗时大于预设耗时阈值的功能函数。
示例性地,以安卓系统为例,应用程序由安卓系统中的Activity Manager和Window Manager系统服务进行监视,当运行应用程序的主线程出现高响应耗时(响应耗时超过一响应耗时阈值)时,安卓系统将其视为应用无响应(ANR)事件,在一些情况下,还会向用户弹出提示,以让用户选择继续等待响应或强制关闭该应用程序。
更加具体地,当安卓系统检测到以下情况之一时,确定为监测到应用程序出现应用无响应事件,例如:应用程序的用户界面线程(UI Thread)超过5秒无响应;广播(Broadcast)超过10秒无响应;服务(Service)超过20秒无响应等,此处不对监测到应用程序出现应用无响应事件的具体实现方式进行具体限制。
进一步地,历史慢消息为应用程序运行过程中所产生的,且发生在应用无响应事件之前的慢消息。在监测到应用程序出现应用无响应事件后,则获取应用无响应事件对应的历史慢消息,其中,慢消息指示应用程序运行过程中执行耗时大于预设耗时阈值的功能函数,即慢函数,更具体地,在应用程序运行过程中,应用程序中的各功能,是通过调用对应的功能函数实现的,若功能函数存在问题,则会导致功能函数的执行耗时变长,进而使应用程序出现卡顿的现象。通过统计消息链路中各消息对应的功能函数的执行耗时,可以确定出其中的慢消息。消息及消息链路的实现方式和原理为本领域技术人员所知晓的常用技术,此处不再赘述。其中,预设耗时阈值可以是用户根据需要预先配置的数值,在不同应用场景和业务中可能不同。通过慢消息确定对应的堆栈信息,可以实现对调用功能函数耗时的分析,因此,慢消息是用于分析和定位应用程序无响应发生原因的重要信息。进一步地,历史慢消息则为发生应用无响应事件之前的一个或多个慢消息,慢消息可能是由于应用程序内部的函数调用导致的,也可能是由于调用系统中函数API导致的,因此,获取应用无响应事件之前的历史慢消息,可以得到更多的与应用程序运行相关的信息,从而更好地确定应用程序发生应用无响应事件的原因。
步骤S102:根据应用无响应事件对应的当前消息和历史慢消息生成无响应数据,无响应数据用于确定所述应用程序出现应用无响应事件的原因。
示例性的,根据历史慢消息,生成无响应数据的方法,包括:获取应用无响应事件对应的当前消息;将当前消息和历史慢消息,合并为具有预设数据格式的无响应数据。具体地,在监测到应用无响应事件时,获取应用无响应事件对应的当前消息和应用无响应事件发生前的历史慢消息,再将当前消息对应的堆栈信息和历史慢消息对应的堆栈信息,保存为符合预设标准的格式数据,例如JS对象简谱(JavaScript Object Notation,JS)格式数据。图4为本公开实施例提供的一种生成无响应数据的过程示意图,如图4所示,根据应用无响应事件确定对应的历史慢消息,并由历史慢消息和应用无响应事件对应的当前消息共同生成一组对应的无响应数据,其中,应用无响应事件的当前信息中包括应用无响应发生时循环器(looper)中正在执行的消息的跟踪(trace)数据。其中,trace数据是在应用程序运行过程中,操作系统所记录的代码运行时长、次数、调用栈等信息的数据。由于无响应数据中的包括应用无响应发生时的相关跟踪数据和与应用无响应事件对应的历史慢消息的堆栈信息,该历史慢消息的堆栈信息和相关跟踪数据可以用于确定该应用无响应事件的成因,从而实现后续基于该无响应数据进行应用程序应用无响应事件的分析和定位。
可选地,在生成无响应数据后,将该符合预设标准的无响应数据上传至服务器,完成应用程序的无响应数据采集过程,以供应用程序的开发者对无响应数据进行分析,实现对应用程序卡顿问题的定位。
其中,在一种可能的实现方式中,终端设备可以根据预设的配置参数,定时向服务器上传该无响应数据,例如每天、每周上传一次无响应数据。也可以终端设备判断应用程序出现应用无响应事件,实时向服务器上传对应的无响应数据。
在另一种可能的实现方式中,终端设备在接收上传指令后,向服务器发送该无响应数据,其中,该上传指令可以是用户直接向终端设备输入的,也可以是应用程序按照预设规则生成的,也可以是服务器向终端设备发送的,此处不进行具体限定。
在本实施例中,通过若监测到应用程序出现应用无响应事件,则获取应用无响应事件对应的历史慢消息,其中,历史慢消息为发生应用无响应事件之前的慢消息,慢消息为应用程序运行过程中所产生的,慢消息指示执行耗时大于预设耗时阈值的功能函数;根据应用无响应事件和历史慢消息,生成无响应数据,无响应数据用于确定应用程序出现应用无响应事件的原因,由于历史慢消息可以提供应用无响应事件发生前终端设备的运行情况信息,其中包含了导致应用程序发生应用无响应事件的重要信息,因此,通过历史慢消息和应用无响应事件的当前消息生成的无响应数据,提高无响应数据的有效性和精准性,可以为应用无响应事件的分析提供更加丰富的数据支持。
图5为本公开实施例提供的应用无响应监测方法流程示意图二,参考图5,本实施例中增加了缓存慢消息的步骤,以及对步骤S101进一步细化,该应用无响应监测方法包括:
S201:缓存运行应用程序过程中产生的慢消息。
终端设备在运行应用程序中,随着应用程序不同功能的执行,对应的函数被操作系统所调用,从而产生对应的消息进入消息队列。通过对消息队列中消息的耗时情况进行统计,可以进一步地确定其中的慢消息,并将该慢消息缓存。由于该慢消息中包含的信息可以用于对应用无响应事件进行解释,因此导致应用程序出现应用无响应事件的原因,在缓存该慢消息的过程中,作为一种信息被操作系统所保存。
可选地,如图6所示,步骤S201包括步骤S2011、S2012两个具体的实现步骤:
S2011:监测应用程序调用的功能函数的执行耗时。
S2012:若功能函数的执行耗时大于预设耗时阈值,则将功能函数对应的消息确定为慢消息,并将慢消息缓存至预设的缓存队列。
示例性地,在安卓系统中,应用程序运行在一个主线程(MainThread)中,主线程对应有一个主线程队列(Main Message Queue),其中主线程主要用于UI的绘制、事件响应,监听与接收事件处理等功能,主线程队列主要用于存放需要处理的消息。主线程从主线程队列中取出消息后,会进行分发,通过统计各消息对应的功能函数的耗时,可以确定对应的消息是否为慢消息。进而,将慢消息缓存至预设的缓存队列中,例如为一个容量为10的队列,从而实现对运行应用程序过程中产生的慢消息的缓存。
其中,可选地,缓存队列为链路阻塞队列(Linked Blocking Queue),将慢消息缓存至预设的缓存队列中的实现方式可以是通过调用Linked Blocking Queue.push()函数实现慢消息的存储。进一步地,缓存至缓存队列的慢消息中,包括消息堆栈信息、消息开始执行时间戳、消息执行耗时中的至少一种。具体地,慢消息的数据结构类型可以如下所示:
其中,stack为一个String类型的变量,表征消息堆栈信息;startMs是一个long类型的变量,表征消息开始执行时间戳;stackCost是一个long类型的变量,表征消息执行耗时。
其中,消息执行耗时是指消息的持续时长。主线程从主线程队列中取出功能函数对应的消息后,会排队进行分发,从取出至分发的间隔时长,即为消息执行耗时。
S202:监听终端设备的操作系统发送的应用无响应信号。
具体地,以安卓系统为例,在主线程从消息队列中取消息后,会进行消息分发,当出现消息分发超时,则安卓系统会发送应用无响应信息,以提示主线程出现阻塞的情况。在一种可能的实现方式中,监听终端设备的系统发送的应用无响应信号,包括:向操作系统的主线程发送请求信号;若主线程响应请求信号的时长大于预设响应时长阈值,则确定操作系统发送应用无响应信号,进而,确定监测到应用程序出现应用无响应事件。
S203:若监测到应用无响应信号,则获取应用无响应事件发生之前的预设时长内,缓存队列中各慢消息的消息执行耗时。
S204:根据消息执行耗时,对各慢消息排序,将消息执行耗时最长的预设数量的慢消息,确定为历史慢消息。
示例性地,若监测到应用无响应信号,说明应用程序的执行过程导致了主线程的阻塞,此时需要采集与其相关的函数调用耗时信息以实现定位问题的目的。具体地,获取应用无响应事件发生前预设时长内,缓存队列中所缓存的慢消息的消息执行耗时,示例性地,消息执行耗时可以是慢消息中包含的内部数据。其中,预设时长可以通过预先设置的配置信息进行设置,例如10分钟,或者1小时。该预设时长可以根据具体的应用程序监测需求和应用场景进行设置。
进一步地,缓存队列中缓存的慢消息是在应用无响应事件发生前一段时间内的所有慢消息,为了提高无响应数据的有效性,降低无响应数据的体积,需要进一步对缓存队列中的慢消息进行筛选,选出消息执行耗时最长的若干慢消息,作为历史慢消息进行后续的处理。图7为本公开实施例提供的一种确定历史慢消息的示意图,参考图7,在应用无响应事件发生前的10分钟内,缓存队列中包括10条慢消息,根据该10条慢消息的消息执行耗时进行由大至小排序,确定其中消息执行耗时最长的慢消息a、慢消息b、和慢消息c为历史慢消息,进而通过该历史慢消息和应用无响应事件的对应的当前消息,生成无响应数据。本实施例中,通过根据消息执行耗时确定历史慢消息,可以实现数据的精简,提高无响应数据的数据密度和数据质量。其中,预设数量可以通过预先设置的配置信息进行设置,例如3条,即将消息执行耗时最长的3条慢消息,确定为历史慢消息进行后续处理。该预设数量也是可以根据具体的应用程序监测需求和应用场景进行设置的。
可选地,在一种可能的实现方式中,还可以包括:
S205:获取预设的归因信息,根据归因信息确定缓存队列中的关键慢消息,并将关键慢消息确定为历史慢消息。
其中,归因信息用于表征应用无响应事件对应的关键慢消息。关键慢消息是造成应用无响应的功能函数对应的慢消息,具体地,在对应用程序进行无响应监测、分析和优化的过程中,根据对无响应数据的归因分析,可以确定出一些会经常性的导致应用无响应事件的功能函数,对这些经常会导致应用无响应事件的功能函数进行统计并形成的信息,即为归因信息,示例性的,归因信息为此类会经常导致应用无响应事件的功能函数的描述信息,根据归因信息,可以实现对此类会经常导致应用无响应事件的功能函数的识别。通过将归因信息预设在应用程序或终端设备内,在监测到应用无响应信号时,根据归因信息,在缓存队列中的多个慢消息中,确定出一个或多个会经常导致应用无响应事件的功能函数对应的消息,即关键慢消息,并将关键慢消息作为历史慢消息进行后续的处理,可以实现提高无响应数据有效性,由于该归因信息可以根据具体需要和应用程序开发者的经验进行设置和调整,因此能够提高本实施例方法的使用灵活性,拓宽本实施例方法的应用场景。
S206:根据应用无响应事件对应的当前消息和历史慢消息,生成无响应数据。
可选地,本实施例中在步骤S206之后,还包括:
S207:根据应用无响应事件对应的当前消息的堆栈信息,确定事件优先级。
S208:根据事件优先级,确定数据上传时间,并按照数据上传时间将无响应数据上传至服务器。
示例性地,在生成无响应数据后,存储在终端设备的本地存储中,根据预设的配置信息,终端设备可以确定将该无响应数据上传至服务器的上传时间。在一种可能的实现方式中,通过应用无响应事件对应的当前消息的堆栈信息,可以确定该应用无响应事件的事件优先级,并根据该事件优先级,确定具体的上传时间,具体地,若该应用无响应事件发生次数频繁,或者会造成较为严重的事故,则该应用无响应事件对应高事件优先级,并优先上传,如确定数据上传时间为立即上传、或1小时内上传。若该应用无响应事件不会造成严重的事故,且发生频率很低,则该应用无响应事件对应低事件优先级,可按照预设时间上传,如在晚上0点上传,或者一周内上传。本实施例中,通过应用无响应事件对应的当前消息的堆栈信息,确定事件优先级,并根据事件优先级确定上传无响应数据的时间,可以避免无响应数据高密度上传造成的服务器拥堵,降低服务器压力,同时避免由于延迟上传导致的无法对导致严重问题的应用无响应事件的及时发现和处理。
在本实施例中,步骤S206与上述实施例中步骤S102的一致,详细论述请参考步骤S201的论述,这里不再赘述。
对应于上文实施例的应用无响应监测方法,图8为本公开实施例提供的一种应用无响应监测装置的结构框图。为了便于说明,仅示出了与本公开实施例相关的部分。参照图8,应用无响应监测装置3包括:
获取单元31,用于若监测到应用程序出现应用无响应事件,则获取应用无响应事件对应的历史慢消息,其中,历史慢消息为应用程序运行过程中所产生的、发生在应用无响应事件之前的慢消息,慢消息指示执行耗时大于预设耗时阈值的功能函数;
生成单元32,用于根据应用无响应事件对应的当前消息和历史慢消息生成无响应数据,无响应数据用于确定应用程序出现应用无响应事件的原因。
其中,获取单元31和生成单元32连接。本实施例提供的应用无响应监测装置3可以执行如图3所示的方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本公开实施例提供的另一种应用无响应监测装置的结构框图,参照图9,图9所示实施例提供的程序无响应监测装置4在图8所示实施例提供的程序无响应监测装置3的基础上,增加了缓存单元41。
在本公开的一个实施例中,缓存单元41,用于缓存运行应用程序过程中产生的慢消息。
在本公开的一个实施例中,缓存单元41在缓存运行应用程序过程中产生的慢消息时,具体用于:监测应用程序调用的功能函数的执行耗时;若功能函数的执行耗时大于预设耗时阈值,则将功能函数对应的消息确定为慢消息,并将慢消息缓存至预设的缓存队列。
在本公开的一个实施例中,缓存队列为链路阻塞队列;慢消息中包括以下至少一种:消息堆栈信息、消息开始执行时间戳、消息执行耗时。
在本公开的一个实施例中,获取单元31在获取应用无响应事件对应的历史慢消息时,具体用于:获取应用无响应事件发生之前的预设时长内,缓存队列中各慢消息的消息执行耗时;根据消息执行耗时,对各慢消息排序,将消息执行耗时最长的预设数量的慢消息,确定为历史慢消息。
在本公开的一个实施例中,获取单元31还用于:获取预设的归因信息,归因信息用于表征应用无响应事件对应的关键慢消息;根据归因信息确定缓存队列中的关键慢消息;将关键慢消息确定为历史慢消息。
在本公开的一个实施例中,获取单元31还用于:向操作系统的线程发送请求信号;若线程在预设响应时长阈值内未响应请求信号,则确定监测到应用程序出现应用无响应事件。
在本公开的一个实施例中,生成单元32还用于:根据应用无响应事件对应的当前消息的堆栈信息,确定事件优先级;根据事件优先级,确定数据上传时间,并按照数据上传时间将无响应数据上传至服务器。
其中,缓存单元41与获取单元31连接。本实施例提供的应用无响应监测装置4可以执行如图5所示的方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
参考图10,其示出了适于用来实现本公开实施例的电子设备900的结构示意图,该电子设备900可以为终端设备或服务器。其中,终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal Digital Assistant,简称PDA)、平板电脑(Portable Android Device,简称PAD)、便携式多媒体播放器(Portable MediaPlayer,简称PMP)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图10示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图10所示,电子设备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与其他设备进行无线或有线通信以交换数据。虽然图10示出了具有各种装置的电子设备900,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置909从网络上被下载和安装,或者从存储装置908被安装,或者从ROM902被安装。在该计算机程序被处理装置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 (11)
1.一种应用无响应监测方法,其特征在于,应用于终端设备,所述方法包括:
若监测到应用程序出现应用无响应事件,则获取所述应用无响应事件对应的历史慢消息,其中,所述历史慢消息为所述应用程序运行过程中所产生的、发生在所述应用无响应事件之前的慢消息,所述慢消息指示执行耗时大于预设耗时阈值的功能函数;
根据所述应用无响应事件对应的当前消息和所述历史慢消息生成无响应数据,所述无响应数据用于确定所述应用程序出现应用无响应事件的原因。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
缓存运行所述应用程序过程中产生的慢消息。
3.根据权利要求2所述的方法,其特征在于,缓存运行所述应用程序过程中产生的慢消息,包括:
监测所述应用程序调用的功能函数的执行耗时;
若所述功能函数的执行耗时大于预设耗时阈值,则将所述功能函数对应的消息确定为慢消息,并将所述慢消息缓存至预设的缓存队列。
4.根据权利要求3所述的方法,其特征在于,所述缓存队列为链路阻塞队列;所述慢消息中包括以下至少一种:
消息堆栈信息、消息开始执行时间戳、消息执行耗时。
5.根据权利要求3所述的方法,其特征在于,获取所述应用无响应事件对应的历史慢消息,包括:
获取所述应用无响应事件发生之前的预设时长内,所述缓存队列中各所述慢消息的消息执行耗时;
根据所述消息执行耗时,对各所述慢消息排序,将所述消息执行耗时最长的预设数量的慢消息,确定为历史慢消息。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
获取预设的归因信息,所述归因信息用于表征应用无响应事件对应的关键慢消息;
根据所述归因信息确定所述缓存队列中的关键慢消息;
将所述关键慢消息确定为历史慢消息。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
向操作系统的线程发送请求信号;
若所述线程在预设响应时长阈值内未响应所述请求信号,则确定监测到所述应用程序出现应用无响应事件。
8.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
根据所述应用无响应事件对应的当前消息的堆栈信息,确定事件优先级;
根据所述事件优先级,确定数据上传时间,并按照所述数据上传时间将所述无响应数据上传至服务器。
9.一种应用无响应监测装置,其特征在于,包括:
获取单元,用于若监测到应用程序出现应用无响应事件,则获取所述应用无响应事件对应的历史慢消息,其中,所述历史慢消息为所述应用程序运行过程中所产生的、发生在所述应用无响应事件之前的慢消息,所述慢消息指示执行耗时大于预设耗时阈值的功能函数;
生成单元,用于根据所述应用无响应事件对应的当前消息和所述历史慢消息生成无响应数据,所述无响应数据用于确定所述应用程序出现应用无响应事件的原因。
10.一种电子设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至8任一项所述的应用无响应监测方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至8任一项所述的应用无响应监测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127202.2A CN112860513A (zh) | 2021-01-29 | 2021-01-29 | 应用无响应监测方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127202.2A CN112860513A (zh) | 2021-01-29 | 2021-01-29 | 应用无响应监测方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112860513A true CN112860513A (zh) | 2021-05-28 |
Family
ID=75986902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110127202.2A Pending CN112860513A (zh) | 2021-01-29 | 2021-01-29 | 应用无响应监测方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112860513A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535457A (zh) * | 2021-09-14 | 2021-10-22 | 腾讯科技(深圳)有限公司 | 检测方法、装置、设备及计算机可读存储介质 |
CN114880159A (zh) * | 2022-07-13 | 2022-08-09 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
-
2021
- 2021-01-29 CN CN202110127202.2A patent/CN112860513A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535457A (zh) * | 2021-09-14 | 2021-10-22 | 腾讯科技(深圳)有限公司 | 检测方法、装置、设备及计算机可读存储介质 |
CN114880159A (zh) * | 2022-07-13 | 2022-08-09 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
CN114880159B (zh) * | 2022-07-13 | 2022-09-13 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112860513A (zh) | 应用无响应监测方法、装置、设备及存储介质 | |
CN111367698B (zh) | 应用程序闪退的检测及处理方法、装置及电子设备 | |
CN112272226B (zh) | 图片加载方法、装置及可读存储介质 | |
CN111277848B (zh) | 直播间互动消息的处理方法、装置、电子设备及存储介质 | |
CN110636367A (zh) | 一种视频加载方法、装置、终端设备及介质 | |
CN114706820B (zh) | 异步i/o请求的调度方法、系统、电子设备及介质 | |
CN112530205A (zh) | 机场停机坪飞机状态检测方法及装置 | |
WO2022160913A1 (zh) | 应用程序卡死问题的监测方法、装置、设备及存储介质 | |
CN116627333A (zh) | 日志缓存方法、装置、电子设备及计算机可读存储介质 | |
US20240187820A1 (en) | Method and system for accessing historical sensor data without location services | |
CN111309496A (zh) | 延时任务实现方法、系统、装置、设备、存储介质 | |
CN111163336A (zh) | 视频资源推送方法、装置、电子设备及计算机可读介质 | |
CN114691448A (zh) | 应用程序卡顿监测方法、装置、设备及存储介质 | |
CN111552613A (zh) | 线程超时的处理方法、装置以及电子设备 | |
CN111367783B (zh) | 应用程序的测试方法、装置及电子设备 | |
CN113590017A (zh) | 用于处理数据的方法、电子设备和计算机程序产品 | |
CN110727558A (zh) | 信息提示方法、装置、存储介质及电子设备 | |
CN110960857A (zh) | 一种游戏数据监控方法、装置、电子设备及存储介质 | |
CN112867119B (zh) | 终端的控制方法、装置、终端和存储介质 | |
CN113407344A (zh) | 一种处理卡顿的方法及装置 | |
CN110377362B (zh) | 清理应用程序的方法、装置、终端及存储介质 | |
CN112860439A (zh) | 应用启动方法、装置、终端及存储介质 | |
CN112650465A (zh) | 终端的控制方法、装置、终端和存储介质 | |
CN112882857B (zh) | 性能问题定位方法、装置、电子设备和存储介质 | |
CN114257870B (zh) | 短视频播放方法、装置、设备及存储介质 |
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 |