CN111045926B - 一种应用程序卡顿的检测方法、装置、介质和电子设备 - Google Patents
一种应用程序卡顿的检测方法、装置、介质和电子设备 Download PDFInfo
- Publication number
- CN111045926B CN111045926B CN201911070926.7A CN201911070926A CN111045926B CN 111045926 B CN111045926 B CN 111045926B CN 201911070926 A CN201911070926 A CN 201911070926A CN 111045926 B CN111045926 B CN 111045926B
- Authority
- CN
- China
- Prior art keywords
- application program
- log
- lock
- phenomenon
- preset
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明提供了一种应用程序卡顿的检测方法、装置、介质和电子设备,其中,所述检测方法包括:检测应用程序是否出现卡顿现象,得到检测结果;在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;解析日志,得到应用程序出现卡顿现象的原因。本发明通过在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;并解析日志,得到应用程序出现卡顿现象的原因;这样,能够精准、且快速地解析出应用程序出现卡顿现象的原因,即:长期持锁的逻辑;提高了应用程序卡顿检测方法的精准度。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种应用程序卡顿的检测方法、装置、介质和电子设备。
背景技术
安卓系统相比于苹果移动设备操作系统而言,安卓系统的运行性能一直不如苹果移动设备操作系统的运行性能优良,主要的原因之一,是安卓采用了Java虚拟机。
虽然手机厂商以及安卓厂商一直致力于对现有的安卓系统的运行性能进行不断优化,其中,虚拟机的性能为优化的关键点。尤其是,基于多线程锁竞争导致的卡顿和应用无响应的问题,是目前待解决的难题。现有的技术,当应用程序出现卡顿、或无响应情况时,由于出厂设置的问题,很难快速且准确地检测出应用程序出现卡顿、或无响应情况的原因,需要浪费大量的人力和物力去寻找引起应用程序出现卡顿、或无响应情况的原因,因此,需要对现有的应用程序卡顿的检测方法进行优化。
因此,在长期的研发当中,发明人对应用程序卡顿的检测方法进行了大量的研究,提出了一种应用程序卡顿的检测方法,以解决上述技术问题之一。
发明内容
本发明的目的在于提供一种应用程序卡顿的检测方法、装置、介质和电子设备,能够解决上述提到的至少一个技术问题。具体方案如下:
根据本发明的具体实施方式,第一方面,本发明提供一种应用程序卡顿的检测方法,包括:
检测应用程序是否出现卡顿现象,得到检测结果;
在所述检测结果为所述应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;
解析所述日志,得到所述应用程序出现卡顿现象的原因。
根据本发明的具体实施方式,第二方面,本发明提供一种应用程序卡顿的检测装置,包括:
检测单元,用于检测应用程序是否出现卡顿现象,得到检测结果;
搜索单元,用于在所述检测单元检测出的所述检测结果为所述应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;
解析单元,用于解析所述搜索单元搜索出的所述日志,得到所述应用程序出现卡顿现象的原因。
根据本发明的具体实施方式,第三方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上任一项所述的应用程序卡顿的检测方法。
根据本发明的具体实施方式,第四方面,本发明提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上任一项所述的应用程序卡顿的检测方法。
本发明实施例的上述方案与现有技术相比,至少具有以下有益效果:本发明通过提供一种应用程序卡顿的检测方法、装置、介质和电子设备,通过在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;并解析日志,得到应用程序出现卡顿现象的原因;这样,能够精准、且快速地解析出应用程序出现卡顿现象的原因,即:长期持锁的逻辑;提高了应用程序卡顿检测方法的精准度。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了根据本发明实施例的应用程序卡顿的检测方法流程图;
图2示出了根据本发明的实施例的应用程序卡顿的检测装置结构示意图;
图3示出了根据本发明的实施例的电子设备连接结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应当理解,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述……,但这些……不应限于这些术语。这些术语仅用来将……区分开。例如,在不脱离本发明实施例范围的情况下,第一……也可以被称为第二……,类似地,第二……也可以被称为第一……。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者装置中还存在另外的相同要素。
下面结合附图详细说明本发明的可选实施例。
实施例1
如图1所示,根据本公开的具体实施方式,第一方面,本公开提供一种应用程序卡顿的检测方法,具体包括如下方法步骤:
S102:检测应用程序是否出现卡顿现象,得到检测结果;
在此步骤中,用于检测应用程序是否出现卡顿现象的方法为常规的方法,这里,不再赘述。在本公开实施例提供的检测方法的技术方案中,只要能够检测出应用程序出现卡顿现象的方法,均在本公开实施例提供的检测方法的技术方案中。
S104:在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;
在某一具体应用场景中,日志对应的标识持锁超时的标签的格式可以为:
dvm_lock_sample。在本公开实施例提供的检测方法,对日志对应的标识持锁超时的标签的格式并不做具体限制。
可选的,在执行S104在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志之前,所述方法还包括以下步骤:
设置锁死管程的预设时长阈值为预设数值。
在具体应用场景中,可以将锁死管程的预设时长阈值对应的预设数值设置为500毫秒,或者,将锁死管程的预设时长阈值对应的预设数值设置为200毫秒,在这里,并不对锁死管程的预设时长阈值对应的预设数值的大小做具体限制。
本公开实施例提供的检测方法,在应用程序侧,把锁死管程的预设时长阈值对应的预设数值进行设置,这样,应用程序侧就能够打印出相应的日志了。
在实际应用中,锁死管程的预设时长阈值是虚拟机互斥锁的静态对象Monitor::lock_profiling_threshold。目前,现有的安卓平台并没有开放设置锁死管程的预设时长阈值的接口。在实际应用中,需要通过读取ELF文件的的接口找到这个符号,然后设置一个适当的值,例如,将锁死管程的预设时长阈值设置为200毫秒,或者,将锁死管程的预设时长阈值设置为500毫秒,这样,就能够精准、且快速地搜索到持锁超时的日志了。
具体步骤如下所述:
步骤a:先用dlopen()函数打开虚拟机的动态库libart.so;
针对此步骤中的dlopen()函数,做如下说明:
dlopen()是一个计算机函数,功能是以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程。使用dlclose()来卸载打开的库。
dlopen()的功能:打开一个动态链接库,并返回动态链接库的句柄;
包含头文件:#include<dlfcn.h>;
函数定义:void*dlopen(const char*pathname,int mode);
步骤b:用dlsym()函数找到如下静态变量
Monitor::lock_profiling_threshold的地址;
针对此步骤中的dlsym()函数,做如下说明:
dlsym是一个计算机函数,功能是根据动态链接库操作句柄与符号,返回符号对应的地址,不但可以获取函数地址,也可以获取变量地址。
Monitor管程的重要特点是,同一个时刻,只有一个进程/线程能进入monitor中定义的临界区,这使得monitor能够达到互斥的效果;但仅仅有互斥的作用是不够的,无法进入monitor临界区的进程/线程,它们应该被阻塞,并且在必要的时候会被唤醒。显然,monitor作为一个同步工具,也应该提供这样的管理进程/线程状态的机制。
步骤c:设置Monitor::lock_profiling_threshold的值为500毫秒(或200毫秒);
步骤d:在应用程序出现卡顿现象时,搜索日志;或者,在应用程序出现无响应状况时,搜索日志;
步骤e:通过工具解析日志,找到dvm_lock_sample日志,找到持锁超时的代码。
需要说明的是,互斥锁为,在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为"互斥锁"的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。
可选的,在执行设置锁死管程的预设时长阈值为预设数值之后,所述方法还包括以下步骤:
读取锁死管程的预设时长阈值,并判断当前线程的持锁时长是否超过预设时长阈值,若当前线程的持锁时长超过预设时长阈值,则打印相应的日志。
可选的,在执行打印相应的日志之后,所述方法还包括以下步骤:
解析相应的日志,得到解析结果;其中,
解析结果至少包括以下一项信息:
标识持锁超时的标签、应用程序包名、当前线程是否是主线程、等待时长、当前正在尝试获取锁的指令对应的所在文件的文件名、当前正在尝试获取锁的指令对应的所属文件下的行号、正在持有当前锁的代码所在文件的文件名、正在持有当前锁的代码所在文件下的行号、等待百分比。
在实际应用中,打印出的日志为:
dvm_lock_sample:
[com.example.test,1,main,100,test1.java,234,test2.java,358,20]。
针对上述打印出的日志进行解析,得到解析结果,从左到右依次如下表所示:
针对上述这句日志进行解析,得知:上述这句日志的意思是:com.example.test程序的main线程,在test1.java的234行正在尝试获取锁,而这把锁已经被另外一个线程在test2.java文件中的的358行代码给持有了。等待时间为阈值的百分之20%。在实际应用中,等待时间即使没有超过锁死管程的预设时长阈值,也有一定概率打印当前日志。而一旦超过锁死管程的预设时长阈值,将100%打印这个日志。通过对这个日志进行解析,能够获知:长时间持有锁的代码,最终能够找到当前应用程序出现卡顿现象的原因、或者应用程序出现无响应的情况的原因。
可选的,在执行设置锁死管程阈值为预设数值之前,所述方法还包括以下步骤:
通过预设格式的函数搜索静态变量的地址,得到静态变量的地址。
在此步骤中,预设格式的函数可以为dlsym()函数搜索静态变量的地址,得到静态变量的地址。在此,并不对函数的预设格式做具体限制。
在某一具体应用场景下,用dlsym()函数找到静态变量
Monitor::lock_profiling_threshold的地址。
针对dlsym()函数,做如下说明:
dlsym是一个计算机函数,功能是根据动态链接库操作句柄与符号,返回符号对应的地址,不但可以获取函数地址,也可以获取变量地址。
函数描述:dlsym(dynamic library symbol)
根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的地址。使用这个函数不但可以获取函数地址,也可以获取变量地址。
handle:由dlopen打开动态链接库后返回的指针;
symbol:要求获取的函数或全局变量的名称。返回值:
void*指向函数的地址,供调用使用。
针对Monitor管程做如下说明:
Monitor管程的重要特点是,同一个时刻,只有一个进程/线程能进入monitor中定义的临界区,这使得monitor能够达到互斥的效果;但仅仅有互斥的作用是不够的,无法进入monitor临界区的进程/线程,它们应该被阻塞,并且在必要的时候会被唤醒。显然,monitor作为一个同步工具,也应该提供这样的管理进程/线程状态的机制。
monitor基本元素
monitor机制需要如下元素来配合,分别是:
临界区
monitor对象及锁
条件变量以及定义在monitor对象上的wait,signal操作。
使用monitor机制的目的主要是为了互斥进入临界区,为了做到能够阻塞无法进入临界区的进程/线程,还需要一个monitor object来协助,这个monitor object内部会有相应的数据结构,例如列表,来保存被阻塞的线程;同时由于monitor机制本质上是基于mutex这种基本原语的,所以monitor object还必须维护一个基于mutex的锁。
此外,为了在适当的时候能够阻塞和唤醒进程/线程,还需要引入一个条件变量,这个条件变量用来决定什么时候是“适当的时候”,这个条件可以来自程序代码的逻辑,也可以是在monitor object的内部。由于monitor object内部采用了数据结构来保存被阻塞的队列,因此,必须对外提供两个API(Application Program Interface,应用程序的调用接口)来让线程进入阻塞状态以及之后被唤醒,分别是wait和notify。
可选的,在执行通过预设格式的函数搜索静态变量的地址,得到静态变量的地址之前,所述方法还包括以下步骤:
通过动态链接库函数打开虚拟机的动态库。
S106:解析日志,得到应用程序出现卡顿现象的原因。
可选的,在S106解析日志,得到应用程序出现卡顿现象的原因包括以下步骤:
解析日志,得到对应的持锁超时的代码;
分析持锁超时的代码,得到应用程序出现卡顿现象的原因。
本公开提供的一种应用程序卡顿的检测方法,通过在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;并解析日志,得到应用程序出现卡顿现象的原因;这样,能够精准、且快速地解析出应用程序出现卡顿现象的原因,即:长期持锁的逻辑;提高了应用程序卡顿检测方法的精准度。
实施例2
本实施例承接实施例1,用于实现如实施例1所述的方法步骤,基于相同的名称含义的解释与实施例1相同,具有与实施例1相同的技术效果,此处不再赘述。结合附图2所示,根据本公开的具体实施方式,第二方面,本公开提供一种应用程序卡顿的检测装置,包括检测单元202、搜索单元204和解析单元206,具体如下:
检测单元202,用于检测应用程序是否出现卡顿现象,得到检测结果;
搜索单元204,用于在检测单元202检测出的检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;
解析单元206,用于解析搜索单元204搜索出的日志,得到应用程序出现卡顿现象的原因。
可选的,解析单元206具体用于:
解析日志,得到对应的持锁超时的代码;
分析持锁超时的代码,得到应用程序出现卡顿现象的原因。
可选的,所述装置还包括:
设置单元(在图2中未示出),用于在搜索单元204搜集具有标识持锁超时的标签的日志之前,设置锁死管程的预设时长阈值为预设数值。
可选的,所述装置还包括:
读取单元(在图2中未示出),用于在设置单元设置锁死管程的预设时长阈值为预设数值之后,读取锁死管程的预设时长阈值;
处理单元(在图2中未示出),用于判断当前线程的持锁时长是否超过读取单元读取出的预设时长阈值,若当前线程的持锁时长超过读取单元读取出的预设时长阈值,则打印相应的日志。
可选的,解析单元206还用于:
在处理单元打印相应的日志之后,解析相应的日志,得到解析结果;其中,解析单元206解析出的解析结果至少包括以下一项信息:
标识持锁超时的标签、应用程序包名、当前线程是否是主线程、等待时长、当前正在尝试获取锁的指令对应的所在文件的文件名、当前正在尝试获取锁的指令对应的所属文件下的行号、正在持有当前锁的代码所在文件的文件名、正在持有当前锁的代码所在文件下的行号、等待百分比。
在实际应用中,打印出的日志为:
dvm_lock_sample:
[com.example.test,1,main,100,test1.java,234,test2.java,358,20]。
针对上述打印出的日志进行解析,得到解析结果,从左到右依次如下表所示:
针对上述这句日志进行解析,得知:上述这句日志的意思是:com.example.test程序的main线程,在test1.java的234行正在尝试获取锁,而这把锁已经被另外一个线程在test2.java文件中的的358行代码给持有了。等待时间为阈值的百分之20%。在实际应用中,等待时间即使没有超过锁死管程的预设时长阈值,也有一定概率打印当前日志。而一旦超过锁死管程的预设时长阈值,将100%打印这个日志。通过对这个日志进行解析,能够获知:长时间持有锁的代码,最终能够找到当前应用程序出现卡顿现象的原因、或者应用程序出现无响应的情况的原因。
可选的,搜索单元204还用于:
在设置单元设置锁死管程阈值为预设数值之前,通过预设格式的函数搜索静态变量的地址,得到静态变量的地址。
可选的,所述装置还包括:
动态库打开单元,用于在搜索单元204通过预设格式的函数搜索静态变量的地址,得到静态变量的地址之前,通过动态链接库函数打开虚拟机的动态库。
本公开提供的一种应用程序卡顿的检测装置,通过在检测单元检测出的检测结果为应用程序出现卡顿现象时,搜索单元搜集具有标识持锁超时的标签的日志;并通过解析单元解析日志,得到应用程序出现卡顿现象的原因;这样,能够精准、且快速地解析出应用程序出现卡顿现象的原因,即:长期持锁的逻辑;提高了应用程序卡顿检测方法的精准度。
实施例3
如图3所示,本实施例提供一种电子设备,该设备用于应用程序卡顿的检测方法,所述电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:通过在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;并解析日志,得到应用程序出现卡顿现象的原因;这样,能够精准、且快速地解析出应用程序出现卡顿现象的原因,即:长期持锁的逻辑;提高了应用程序卡顿检测方法的精准度。
实施例4
本公开实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的应用程序卡顿的检测方法。
实施例5
下面参考图3,其示出了适于用来实现本公开实施例的电子设备的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图3示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图3所示,电子设备可以包括处理装置(例如中央处理器、图形处理器等)301,其可以根据存储在只读存储器(ROM)302中的程序或者从存储装置308加载到随机访问存储器(RAM)303中的程序而执行各种适当的动作和处理。在RAM 303中,还存储有电子设备操作所需的各种程序和数据。处理装置301、ROM 302以及RAM 303通过总线304彼此相连。输入/输出(I/O)接口305也连接至总线304。
通常,以下装置可以连接至I/O接口305:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置306;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置307;包括例如磁带、硬盘等的存储装置308;以及通信装置309。通信装置309可以允许电子设备与其他设备进行无线或有线通信以交换数据。虽然图3示出了具有各种装置的电子设备,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置309从网络上被下载和安装,或者从存储装置308被安装,或者从ROM 302被安装。在该计算机程序被处理装置301执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:通过在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;并解析日志,得到应用程序出现卡顿现象的原因;这样,能够精准、且快速地解析出应用程序出现卡顿现象的原因,即:长期持锁的逻辑;提高了应用程序卡顿检测方法的精准度。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:通过在检测结果为应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;并解析日志,得到应用程序出现卡顿现象的原因;这样,能够精准、且快速地解析出应用程序出现卡顿现象的原因,即:长期持锁的逻辑;提高了应用程序卡顿检测方法的精准度。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
Claims (8)
1.一种应用程序卡顿的检测方法,其特征在于,包括:
检测应用程序是否出现卡顿现象,得到检测结果;
在所述检测结果为所述应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;
解析所述日志,得到所述应用程序出现卡顿现象的原因;
在所述搜集具有标识持锁超时的标签的日志之前,所述方法还包括:
通过预设格式的函数搜索静态变量的地址,得到静态变量的地址;
设置锁死管程的预设时长阈值为预设数值。
2.根据权利要求1所述的方法,其特征在于,所述解析所述日志,得到所述应用程序出现卡顿现象的原因包括:
解析所述日志,得到对应的持锁超时的代码;
分析所述持锁超时的代码,得到所述应用程序出现卡顿现象的原因。
3.根据权利要求1所述的方法,其特征在于,在所述设置锁死管程的预设时长阈值为预设数值之后,所述方法还包括:
读取所述锁死管程的所述预设时长阈值,并判断当前线程的持锁时长是否超过所述预设时长阈值,若当前线程的所述持锁时长超过所述预设时长阈值,则打印相应的日志。
4.根据权利要求3所述的方法,其特征在于,在所述打印相应的日志之后,所述方法还包括:
解析相应的日志,得到解析结果;其中,
所述解析结果至少包括以下一项信息:
标识持锁超时的标签、应用程序包名、当前线程是否是主线程、等待时长、当前正在尝试获取锁的指令对应的所在文件的文件名、当前正在尝试获取锁的指令对应的所属文件下的行号、正在持有当前锁的代码所在文件的文件名、正在持有当前锁的代码所在文件下的行号、等待百分比。
5.根据权利要求1所述的方法,其特征在于,在所述通过预设格式的函数搜索静态变量的地址,得到静态变量的地址之前,所述方法还包括:
通过动态链接库函数打开虚拟机的动态库。
6.一种应用程序卡顿的检测装置,其特征在于,包括:
检测单元,用于检测应用程序是否出现卡顿现象,得到检测结果;
搜索单元,用于在所述检测单元检测出的所述检测结果为所述应用程序出现卡顿现象时,搜集具有标识持锁超时的标签的日志;
解析单元,用于解析所述搜索单元搜索出的所述日志,得到所述应用程序出现卡顿现象的原因;
设置单元,用于在所述搜索单元搜集具有标识持锁超时的标签的日志之前,设置锁死管程的预设时长阈值为预设数值;
所述搜索单元,还用于在所述设置单元设置锁死管程的预设时长阈值为预设数值之前,通过预设格式的函数搜索静态变量的地址,得到静态变量的地址。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至5中任一项所述的方法。
8.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911070926.7A CN111045926B (zh) | 2019-11-05 | 2019-11-05 | 一种应用程序卡顿的检测方法、装置、介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911070926.7A CN111045926B (zh) | 2019-11-05 | 2019-11-05 | 一种应用程序卡顿的检测方法、装置、介质和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111045926A CN111045926A (zh) | 2020-04-21 |
CN111045926B true CN111045926B (zh) | 2023-04-14 |
Family
ID=70232652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911070926.7A Active CN111045926B (zh) | 2019-11-05 | 2019-11-05 | 一种应用程序卡顿的检测方法、装置、介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111045926B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111580940A (zh) * | 2020-05-11 | 2020-08-25 | 北京字节跳动网络技术有限公司 | 应用程序的多进程间的进程处理方法、装置及电子设备 |
CN117667430A (zh) * | 2022-08-31 | 2024-03-08 | 华为技术有限公司 | 持锁进程检测方法及相关设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009245184A (ja) * | 2008-03-31 | 2009-10-22 | Ntt Data Corp | プログラム診断装置及びプログラム診断方法ならびにそのプログラム |
CN106776253A (zh) * | 2016-12-08 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种界面卡顿监测方法及装置 |
CN108108303A (zh) * | 2017-12-29 | 2018-06-01 | 珠海市君天电子科技有限公司 | 一种应用程序卡顿测试方法、相关设备及计算机存储介质 |
CN108446199A (zh) * | 2017-02-16 | 2018-08-24 | 阿里巴巴集团控股有限公司 | 一种应用卡顿的检测方法及装置 |
CN109891392A (zh) * | 2017-09-30 | 2019-06-14 | 华为技术有限公司 | 一种系统服务超时的处理方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7818743B2 (en) * | 2005-09-22 | 2010-10-19 | International Business Machines Corporation | Logging lock data |
US20140040219A1 (en) * | 2012-07-31 | 2014-02-06 | Hideaki Kimura | Methods and systems for a deadlock resolution engine |
US9690623B2 (en) * | 2015-11-06 | 2017-06-27 | International Business Machines Corporation | Regulating hardware speculative processing around a transaction |
US10915424B2 (en) * | 2017-10-12 | 2021-02-09 | The Board Of Regents Of The University Of Texas System | Defeating deadlocks in production software |
-
2019
- 2019-11-05 CN CN201911070926.7A patent/CN111045926B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009245184A (ja) * | 2008-03-31 | 2009-10-22 | Ntt Data Corp | プログラム診断装置及びプログラム診断方法ならびにそのプログラム |
CN106776253A (zh) * | 2016-12-08 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种界面卡顿监测方法及装置 |
CN108446199A (zh) * | 2017-02-16 | 2018-08-24 | 阿里巴巴集团控股有限公司 | 一种应用卡顿的检测方法及装置 |
CN109891392A (zh) * | 2017-09-30 | 2019-06-14 | 华为技术有限公司 | 一种系统服务超时的处理方法及装置 |
CN108108303A (zh) * | 2017-12-29 | 2018-06-01 | 珠海市君天电子科技有限公司 | 一种应用程序卡顿测试方法、相关设备及计算机存储介质 |
Non-Patent Citations (2)
Title |
---|
许发见 ; .智能终端的信息安全问题分析及应对研究.北京警察学院学报.2018,(第05期),全文. * |
闻丽华 ; .Java多线程机制实现及其应用.消费导刊.2009,(第06期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111045926A (zh) | 2020-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110457277B (zh) | 业务处理性能分析方法、装置、设备及存储介质 | |
CN111274760B (zh) | 富文本数据处理方法、装置、电子设备及计算机存储介质 | |
CN110489101B (zh) | 接口模拟方法、系统、介质和电子设备 | |
WO2021208512A1 (zh) | 用户界面的控件信息的获取方法、装置、终端及存储介质 | |
CN110471709B (zh) | 一种加速网页打开速度的方法、装置、介质和电子设备 | |
US9552221B1 (en) | Monitoring application execution using probe and profiling modules to collect timing and dependency information | |
CN111506900B (zh) | 漏洞检测方法、装置、电子设备及计算机存储介质 | |
CN111045926B (zh) | 一种应用程序卡顿的检测方法、装置、介质和电子设备 | |
CN110764941B (zh) | 获取调用栈栈帧指令偏移的方法、装置、介质和设备 | |
CN110489179B (zh) | 获取调用栈栈帧函数签名的方法、装置、介质和设备 | |
CN110377341B (zh) | 一种监听无响应异常的方法、装置、介质和电子设备 | |
CN112817831A (zh) | 应用性能监测方法、装置、计算机系统和可读存储介质 | |
CN110489165B (zh) | 获取调用栈栈帧指令偏移的方法、装置、介质和设备 | |
CN111241823A (zh) | 一种依赖配置的管理方法、装置、电子设备及存储介质 | |
CN110941549B (zh) | 一种内存泄漏的检测方法、装置、介质和电子设备 | |
CN111552613A (zh) | 线程超时的处理方法、装置以及电子设备 | |
CN111382017A (zh) | 故障查询方法、装置,服务器及存储介质 | |
CN110716859A (zh) | 自动为修改的代码推送测试用例的方法及相关装置 | |
CN111258797B (zh) | 一种内存泄露的检测方法、装置、介质和电子设备 | |
CN112379967B (zh) | 模拟器检测方法、装置、设备及介质 | |
CN111124627B (zh) | 应用程序的调起者确定方法、装置、终端及存储介质 | |
CN110908860B (zh) | 一种Java线程的获取方法、装置、介质和电子设备 | |
CN111782410B (zh) | 锁堵塞的监控方法、装置、电子设备及计算机可读介质 | |
CN113780163A (zh) | 一种页面加载时间的检测方法、装置、电子设备及介质 | |
CN111274082B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |