CN107402886B - 堆栈分析方法及相关装置 - Google Patents
堆栈分析方法及相关装置 Download PDFInfo
- Publication number
- CN107402886B CN107402886B CN201710676954.8A CN201710676954A CN107402886B CN 107402886 B CN107402886 B CN 107402886B CN 201710676954 A CN201710676954 A CN 201710676954A CN 107402886 B CN107402886 B CN 107402886B
- Authority
- CN
- China
- Prior art keywords
- storehouse
- section
- class
- weight
- data frame
- 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
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/3636—Software debugging by tracing the execution of the program
-
- 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/366—Software debugging using diagnostics
Abstract
本发明提供了堆栈分析方法及相关装置,以实现对堆栈进行分类。在本申请所提供的堆栈分析方法中,获取进程崩溃产生的各堆栈;所述堆栈为多层数据结构,每一层数据为一数据帧;相邻两数据帧按照调用顺序组成的向量为路段;根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类;其中,属于同一堆栈类的堆栈两两间的相似度大于或不小于相似度阈值。可见,在本申请实施例中,创造性得提出每一层数据为一数据帧,相邻两数据帧按照调用顺序组成的向量为路段。在分类时,将彼此相似度的堆栈归为一类,从而实现了对堆栈的分类。同时,由于属于同一类的堆栈彼此相似,其解决方案或问题根源也近乎相同,后续可节省针对性修复的时间,提高处理效率。
Description
技术领域
本发明涉及计算机技术领域,更具体的,涉及堆栈分析方法及相关装置。
背景技术
应用软件,例如智能终端游戏在崩溃(crash)时会产生dump文件,dump文件中的堆栈信息可用于分析崩溃原因,从而可依据崩溃原因有针对性的对应用程序进行修复。
每次crash都会上传dump文件,进而可获取到相应的堆栈信息。在堆栈数据海量的情况下,如何对堆栈进行分析,成为目的亟待解决的问题。
发明内容
有鉴于此,本发明实施例提供堆栈分析方法及相关装置,以实现对堆栈进行分类。
为实现上述目的,本发明实施例提供如下技术方案:
一种堆栈分析方法,包括:
获取进程崩溃产生的各堆栈;所述堆栈为多层数据结构,每一层数据为一数据帧;相邻两数据帧按照调用顺序组成的向量为路段;
根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类;其中,属于同一堆栈类的堆栈两两间的相似度大于或不小于相似度阈值。
一种堆栈分析装置,包括:
获取单元,用于获取进程崩溃产生的各堆栈;所述堆栈为多层数据结构,每一层数据为一数据帧;相邻两数据帧按照调用顺序组成的向量为路段;
分类单元,用于根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类;其中,属于同一堆栈类的堆栈两两间的相似度大于或不小于相似度阈值。
一种堆栈分析系统,至少包括堆栈分析服务器,所述堆栈分析服务器包括上述的堆栈分析装置。
可见,在本申请实施例中,创造性得提出每一层数据为一数据帧,相邻两数据帧按照调用顺序组成的向量为路段。在分类时,是根据所述路段的权重对各堆栈进行分类的,其中,属于同一堆栈类的任意两堆栈的相似度大于或不小于相似度阈值。这样,本申请实施例将相似度大于或不小于相似度阈值的堆栈归为一类,从而实现了对堆栈的分类。同时,由于属于同一类的堆栈彼此相似,其解决方案或问题根源也近乎相同,因此,后续可节省针对性修复的时间,提高了处理效率。此外,在本申请提供的分类过程中,考虑了堆栈的层次以及堆栈中不同位置的重要性,贴合了堆栈的特点,其分类结果相对现有聚类方式更为准确。
附图说明
图1a、图1b为本发明实施例提供的堆栈分析系统;
图2a为本发明实施例提供的堆栈分析服务器的示例性结构图;
图2b为本发明实施例提供的堆栈分析装置的示例性结构图;
图3、10为本发明实施例提供的堆栈分析方法的示例性流程图;
图4为本发明实施例提供的堆栈示意图;
图5为本发明实施例提供的路段划分示意图;
图6为本发明实施例提供的路段权重计算示意图;
图7为本发明实施例提供的展示界面示意图;
图8为本发明实施例提供的并列展示的堆栈示意图;
图9为本发明实施例提供的展示解决方案的示意图;
图11为本发明实施例提供的指定路段的示意图。
具体实施方式
一个进程每次崩溃(crash)都会产生一个dump文件,进而可获取到相应的堆栈信息(可称为crash堆栈),本文后续所提及的堆栈均为进程crash时产生的堆栈信息。以大型游戏开发厂商为例,仅从手游中选取160余个项目,每小时就会产生200万~300万次crash,每次crash都会上传dump文件,因此,堆栈数据也是海量的。
在堆栈数据海量的情况下,业界的通用做法是聚类分析。
目前业界针对堆栈的聚类比较原始和简单,通常将去除干扰因素后文本完全一致的堆栈分为一类,也即将完全相同的堆栈聚为一类。在聚类时,使用的是现有的文本匹配算法,例如Google的Simhash算法。
然而,发明人在研发本发明创造时发现,在很多情况下,尽管两堆栈信息并不完全相同,但它们的问题根源是相同的。而根据现有的聚类方式,上述两堆栈却会被分至不同的堆栈类,认为其对应不同的问题根源(或crash原因)。因此,现有的聚类方式的召回率很低,实际价值不大。
另外,现有的聚类方式是针对文本进行匹配的。对于普通文本而言,现有的聚类方式是可行的。然而堆栈信息并非普通的文本,其特殊之处在于:
一,堆栈是有层次的,为多层数据结构,每层数据对应一个函数,相邻层次之间有先后调用关系;
二,堆栈的栈顶位置是程序最终崩溃的位置。通常情况下,越是靠近栈顶,所提供给开发者的有用信息越多,越重要。
普通的文本匹配算法也并未利用堆栈的上述两特点进行聚类,这影响了其聚类效果。
有鉴于此,本申请提供的堆栈分析方法及相关装置(例如堆栈分析装置、堆栈分析服务器和堆栈分析系统),以对堆栈进行分类,并解决上述提及的问题。
图1a示出了上述堆栈分析系统的一种示例性结构,包括:汇集服务器101,前端服务器(web服务器)102和堆栈分析服务器103。
其中,汇集服务器101可负责将各客户端进程上报的dump文件,进而获取到dump文件中的堆栈,并提供给堆栈分析服务器103。
堆栈分析服务器103可用于将相似的堆栈聚为一类,最终得到多个堆栈类,在同一堆栈类中堆栈拥有近乎相同的解决方案或者问题根源。
前端服务器102可用于展示聚类结果。用户可通过访问web站点(前端服务器102)来获得聚类结果。
图1b示出了上述堆栈分析系统的另一种示例性结构,在图1b所示结构中,汇集服务器101和堆栈分析服务器103可集成在同一服务器上,或者,汇集服务器101和前端服务器102可集成在同一服务器上。
需要说明的是,在图1a和图1b中,虽然各类服务器的数量为一个,但本领域技术人员可以理解的是,可根据实际需要对各类服务器的数量进行灵活设计。
图2a示出了上述堆栈分析服务器103的一种通用计算机系统结构。
上述计算机系统可包括总线、处理器1、存储器2、通信接口3、输入设备4和输出设备5。处理器1、存储器2、通信接口3、输入设备4和输出设备5通过总线相互连接。其中:
总线可包括一通路,在计算机系统各个部件之间传送信息。
处理器1可以是通用处理器,例如通用中央处理器(CPU)、网络处理器(NetworkProcessor,简称NP)、微处理器等,也可以是特定应用集成电路(application-specificintegrated circuit,ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。还可以是数字信号处理器(DSP)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
处理器1可包括主处理器(CPU)。处理器1的个数可为一个或多个。
存储器2中保存有执行本发明技术方案的程序,还可以保存有操作系统和其他关键业务。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器2可以包括只读存储器(read-only memory,ROM)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(random access memory,RAM)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。
输入设备4可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。
输出设备5可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。
通信接口3可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。
处理器1通过执行存储器2中所存放的程序以及调用其他设备,可实现下述实施例提供的堆栈分析方法。
而前述堆栈分析装置可以软件的形式或硬件的形式应用于堆栈分析服务器103中。当以软件形式存在时,上述堆栈分析装置具体可为独立的应用程序,也可作为某应用程序或操作系统的组件。当以硬件形式存在时,上述堆栈分析装置具体可为堆栈分析服务器103的处理器。
图2b示出了上述堆栈分析装置的一种示例结构,可包括获取单元201、分类单元202,在其他实施例中,还可包括展示单元203,上述各单元的功能,可由前述的处理器1执行存储器2中所存放的程序以及调用其他设备实现。本文后续将结合堆栈分析方法对上述各单元的功能进行介绍。
此外,堆栈分析装置也可具有与堆栈分析服务器相类似的通用计算机系统结构。
下面将基于上面的本申请涉及的共性方面,对本申请实施例进一步详细说明。
图3示出了上述堆栈分析方法的一种示例性流程,包括:
S301:堆栈分析服务器获取进程崩溃产生的各堆栈。
可由前述的获取单元201执行步骤301。
在一个示例中,可获取预定时长内的各堆栈,预定时长的时长粒度可为天,例如,可获取两天内进程崩溃产生的堆栈。当然,也可设计预定时长的时长粒度为小时级(例如一小时,两小时等等),乃至分钟级等。
请参见图4,堆栈为多层数据结构,形如#00#01这样的字段,是用来标注数据层次,#00表示栈顶,通常是程序最终崩溃的所在位置。每一层数据都对应一个函数,相邻两层数据的函数之间存在调用关系,越接近栈底的函数越早执行。
在本申请中,将每一层数据称为一数据帧(以Frame表示),相邻两数据帧之间存在调用关系。
此外,有些Frame中可能会包含关键词(Key Word),包含关键词的数据帧可称为关键帧(Key Frame)。
关键词可根据实际情况进行灵活设定。示例性的,关键词可包括:展示出支付组件特征的字段(例如支付组件名称字段),展示出登录组件特征的字段(例如登录组件名称字段),展示出webview组件(网络视图)特征的字段(例如webview组件名称),以及,展示出输入法特征的字段(例如输入法名称)中的至少一种。其中,webview组件是移动客户端中常用来渲染web页面的组件。
前述提及了,相邻两数据帧之间存在调用关系。在本申请中,请参见图5,将相邻两数据帧按照调用顺序组成的向量称为路段(Route)。Route在本申请中是一个特定名词,定义为:堆栈中的数据帧和它调用的数据帧组成的一个向量,表示一个函数被另外一个函数调用。例如,向量<Frame1,Frame2>中,Frame1在前,Frame2在后,表示Frame1被Frame2调用。
需要说明的是,仍请参见图4,形如#00#01这样的字段,仅仅是用来表示层次的,并不需要应用到堆栈的匹配中,所以其为干扰信息;
而形如pc 000c4c20、pc 000b4148的字段,用来表示内存地址,一个堆栈在不同的机器上,甚至在同一台机器上的不同时间,函数所在的内存地址都可能会不同,因此,内存地址通常也会被视为干扰信息;
此外,形如[armeabi-v7a::]的字段,其实是用来告知当前执行平台的,例如这是arm架构下的平台,也是干扰信息。
为了后续分类准确,可由堆栈分析服务器去除获取的各堆栈中的干扰信息。当然,也可由其他设备(例如前述的汇集服务器)对崩溃产生的各堆栈去除干扰信息后,将去除干扰信息后的堆栈提供给堆栈分析服务器。如无特殊声明,后续提及的堆栈均为去除干扰信息后的堆栈。
此外,需要说明的是,在本申请中,去除干扰信息后完全相同的堆栈对应同一crash ID(identification),被视为一个堆栈。在后续分类时,也是对不同的crash ID表征的堆栈进行分类的。
S302:堆栈分析服务器根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类;其中,属于同一堆栈类的堆栈两两间的相似度大于或不小于相似度阈值。
本领域技术人员可根据实际情况灵活设计相似度阈值的具体取值,例如可设定为0.8、0.2等。
可由前述的分类单元202执行步骤302。
上述路段的权重至少可根据上述路段中的数据帧的位置决定。在一个示例中,路段位置以位置标识表示,所以可使用路段的位置标识计算路段的权重。
例如,请参见图5,Route1-Route3中的1-3即为位置标识,越靠近栈底,位置标识越小。
计算权重的方式有多种,以v表示某一Route的权重,以n表示Route的位置标识,则v可用公式表示为:v=f(n)。其中,f(n)表示自变量为n的函数。
v和n之间的函数关系可为简单的线性关系、指数关系等,当然,也可用其他的函数关系来表征v和n。本领域技术人员可进行灵活设计。
例如,可设计v和n之间的函数关系为v=n*(n+1)/2。
在其他示例中,可考虑关键词的影响,假定任一路段包含的两数据帧表示为第一数据帧和第二数据帧,则可设计v和n之间的函数关系为:v=n*(n+1)/2+F1+F2其中,F1表示第一数据帧的附加因子,F2表示第二数据帧的附加因子,当第一数据帧中包含关键词(也即第一数据帧为关键帧)时,F1等于n/2,否则,F1等于0;当第二数据帧中包含关键词(也即第二数据帧为关键帧)时,F2等于n/2,否则,F2等于0。
例如,请参见图6,在没有关键帧的时候,三个Route(Route1-3)的权重分别为1,3,6。而在Frame3为关键帧时,Route2的权重变为2*(2+1)/2+2/2+0=4,Route1的权重变为1*(1+1)/2+1/2+0=1.5。
由于堆栈数据越靠近栈顶越重要,因此在本申请中,路段越靠近栈顶权重越大,权重越大,则表征其越重要,另外,路段中的关键帧越多,权重也相对越大。
至于任意两堆栈间的相似度acc,可根据该任意两堆栈所包含路段的权重计算得到。
在一个示例中,将任意两个堆栈表示为第一堆栈和第二堆栈,则acc示例性的可通过如下方式计算:
A:确定第一堆栈与第二堆栈之间相同的路段(相同路段);
更具体的,可计算每一路段的散列值,比如第一堆栈和第二堆栈各路段的散列(hash)值,散列值相同的路段即为第一堆栈与第二堆栈之间相同的路段。
Hash算法可把任意长度的输入变换成固定长度的输出,该输出就是散列值。由于路段包含的数据有长有短不方便比较,所以将路段变换为固定长度的散列值更有利于比较。
B:将上述相同路段在第一堆栈中对应的权重相加,得到第一权重和x;
举例来讲,假定第一堆栈与第二堆栈有两个相同路段,这两个路段在第一堆栈中的权重分别为c1、d1,则将c1和d1相加,得到x。
C:将上述相同路段在上述第二堆栈中对应的权重相加,得到第二权利和y;
沿用前例,假定第一堆栈与第二堆栈有两个相同路段,这两个路段在第一堆栈中的权重分别为c2、d2,则将c2和d2相加,得到y。
D:计算第一堆栈的权重总和以及第二堆栈的权重总和,分别记为a和b;
假定第一堆栈有7个路段,则将这7个路段的权重进行相加,得到权重总和(也可称为第一权重总和)a;同理,假定第二堆栈有5个路段,则将这5个路段的权重进行相加,得到权重总和(也可称为第二权重总和)b。
E:采用公式计算上述第一堆栈和上述第二堆栈间的相似度。
当然,在本申请其他实施例中,也可采用其他方式计算acc。例如,采用公式acc=x/a+y/b或等计算acc。
S303:在分类完成后,堆栈分析服务器对各堆栈类按预设排序规则进行排序,并展示前R个(例如前10个)堆栈类。
在一个示例中,堆栈分析服务器可在排序后,将排序结果发送给前端服务器,由前端服务器进行展示。
在另一个示例中,可由前述的分类单元202对各堆栈类按预设排序规则进行排序,并将排序结果发送给展示单元203,由展示单元203展示前R个堆栈类。
在展示时,可从前R个堆栈类的每一堆栈类中,选择代表性的crash ID进行展示。例如,可选择影响用户数最多的堆栈的crash ID作为代表,或累计发生计数最多的堆栈的crash ID作为代表等等。
除代表性的crash ID外,前述的分类单元202还可统计各堆栈类的累计影响用户数、累计crash占比、累计发生次数、上报版本、最后crash时间以及解决方案中的至少一种,并予以展示。
展示界面示例性的可参见图7。在图7中按照影响用户数降序展示了前10个堆栈类。而其中的Crash ID一列,展示的是各堆栈类中影响用户数最多的堆栈的crash ID。
此外,图7中还展示了各堆栈类的累计影响用户数、累计crash占比、累计发生次数、上报版本、最后crash时间、解决方案。
另外,图7中的同类问题一列,还展示了与代表性的crash ID属于同一类的其他crash ID。
当然,若接收到加载指令,还可展示前R+1至2R个堆栈类。例如,用户如进行翻页操作,会发送页面加载请求。在此情况下,可展示前11-20个堆栈类。
此外,在本申请其他实施例中,对于选定堆栈类,还可将选定堆栈类所包含的堆栈并列展示,以便用户查看同一类中的各堆栈间的差异。
在一个示例中,可通过电子设备的输入设备输入选定堆栈类,例如用户可使用鼠标点击了展示的某一个堆栈类,则点击的堆栈类就是选定堆栈类。当然,用户也可使用键盘输入选定堆栈类或选择一个堆栈类,此外,也可通过语音输入等方式选定一个堆栈类。
举例来讲,用户点击图7的第4个堆栈类,则示例性的,请参见图8,可并列展示第4个堆栈类中的堆栈。此外,还可突出显示第4个堆栈类中其他的堆栈与代表性堆栈之间存在差异的字段。
在另一个示例中,也可将所有堆栈类或将排名在首位的堆栈类,作为选定堆栈类。
在又一示例中,还可展示选定堆栈类中堆栈的解决方案。示例性的,请参见图9,其展示了第4个堆栈类中各堆栈的解决方案。
当然,还有其他情况,假定用户选择了图8并列展示的堆栈中的某个堆栈(可称其为堆栈A),若堆栈A有解决方案,则可展示堆栈A的解决方案,此外,还可展示其他堆栈的解决方案以供参考;而若堆栈A未关联解决方案,则可展示第4个堆栈类中的其他堆栈的解决方案,以供参考。
在又一示例中,也可根据界面的大小而自行选定展示哪几个堆栈类的解决方案。
利用匹配两个Crash堆栈的相似度的功能,可以将已经解决了的Crash堆栈与全库匹配得到在其他项目中是否存在同一类Crash堆栈。假如项目A解决了一个Crash堆栈C1,如果匹配到项目B中也存在类似C1的堆栈,就可以推荐B项目的开发人员借鉴C1的解决方案。
图8和图9所示界面可作为一个界面的子界面,也为独立的界面。
可见,在本申请实施例中,创造性得提出每一层数据为一数据帧,相邻两数据帧按照调用顺序组成的向量为路段。在分类时,是根据所述路段的权重对各堆栈进行分类的,其中,属于同一堆栈类的任意两堆栈的相似度大于或不小于相似度阈值。这样,本申请实施例将相似度大于或不小于相似度阈值的堆栈归为一类,从而实现了对堆栈的分类。同时,由于属于同一类的堆栈彼此相似,其解决方案或问题根源也近乎相同,因此,后续可节省针对性修复的时间,提高了处理效率。
此外,由于堆栈数据越靠近栈顶越重要,而在本申请中路段越靠近栈顶权重越大,路段中的关键帧越多,权重也越大,通过权重大小表征堆栈中数据的重要程度。而acc又是由路段权重计算得到,因此,在本申请提供的分类过程中,考虑了堆栈的层次以及堆栈中不同位置的重要性,贴合了堆栈的特点,其分类结果相对现有聚类方式更为准确。
由于相似度是两两计算的,所以若获取到的堆栈数量为N,则其复杂度是O(N2)。如果N为百万级别,则需要计算万亿次的相似度,其计算量过于巨大。
而实际上,大部分的堆栈都是在做无谓的比较计算。因为一些堆栈一眼就可以看出不可能和另一些堆栈是同一类。那么有什么办法可以将这种“一眼”看去就不可能相似的堆栈除掉,不进行计算呢?这样就可以去除很多冗余计算。
图10示出了上述堆栈分析方法的另一种示例性流程,本实施例重点在于介绍如何去除冗余计算。
上述流程可包括如下步骤:
S1000:堆栈分析服务器获取进程崩溃产生的各堆栈。
S1000与前述的S301相类似,在此不作赘述。
S1001:堆栈分析服务器处理干扰信息。
例如,去掉内存地址、模块路径、平台信息、数据层次标注字段等。
可由前述的获取单元201执行步骤1001。
S1002:堆栈分析服务器将去掉干扰信息后的堆栈划分为路段,并计算每一个路段的散列值。
在一个示例中,可以使用md5值作为散列值。路段以及数据帧的相关描述请参见前述步骤301部分的介绍,在此不作赘述。
S1003:堆栈分析服务器对去掉干扰信息后的各堆栈进行预划分,得到至少一个预划分集合。
可由前述的分类单元202执行步骤1003。
可以Crash ID表征堆栈,在一个示例中,对获取的各堆栈进行预划分可进一步包括如下步骤:
A:按关键词对获取的各堆栈(的Crash ID)进行预划分,得到至少一个关键词集合。
可用关键词作为关键词集合的名称,任一关键词集合中的堆栈包含相同的关键词。
例如,堆栈A具有两个关键帧,一个包含关键词e,一个包含关键词f,则将有两个关键词集合分别包含堆栈A的crash ID,其中一个关键词集合以关键词e命名,其中的所有堆栈均包含关键词e,另一个关键词集合以关键词f命名,其中的所有堆栈均包含关键词f。
而没有关键词的堆栈,将其划分到同一个集合中,并以“Common”作为该集合的名称(也即以Common作为关键词)。
B:按项目对获取的各堆栈(的Crash ID)进行预划分,得到至少一个项目集合。
可使用项目的名称为项目集合的命名。同一项目集合中堆栈属于同一项目。例如,将项目为王者荣耀的crash ID划分到一个集合中,将项目为英雄联盟的crash ID划分到另一集合中。当然,若只有一个项目,则只会得到一个项目集合。
C:按路段的散列值对获取的各堆栈进行划分,得到至少一个散列值集合。
其中,任一散列值集合对应的散列值不同于其他散列值集合,散列值集合可以散列值命名。
散列值集合中的堆栈包含具有相同散列值的路段。举例来讲,假定某散列值集合对应的散列值表示为S,该散列值集合中的Crash ID所表征的堆栈均包含散列值为S的路段。
需要说明的是,上述每一关键词集合或每一项目集合均为一个预划分集合,而散列值集合并不作为预划分集合。
S1004:堆栈分析服务器获取目标堆栈对应的目标集合。
可选择任一未分类堆栈为目标堆栈。在目标堆栈对应的目标集合中,任一堆栈中的至少一个路段与目标堆栈的指定路段相同。
在一个示例中,可将目标堆栈中连续M层数据帧对应的M-1个路段作为指定路段,或者说,目标堆栈的指定路段包括目标堆栈中连续M层数据帧对应的M-1个路段。其中,上述连续M层数据帧中包括顶层数据帧。举例来讲,请参见图11,假定M=4,顶层为1,则指定路段包括Route 5-7,其hash值分别为h5-h7,那么,在目标集合中的任一堆栈所包含的路段中,存在hash值等于h5、h6或h7的路段。
在一个示例中,上述M可为目标堆栈的最少命中层数,其特点是:该连续M层数据帧对应的路段的权重之和与目标堆栈的权重总和的比值,不大于相似度阈值m。
可试验不同的M取值,直至找到M的最大取值。当然,为了简化计算流程,也可根据上述目标堆栈的总层数N计算M。
M可用公式表示为:M=f(N)。其中,f(N)表示自变量为N的函数。
在一个示例中,可令其中,int可表示向下取整。
之前介绍了,可按路段的散列值对获取的各堆栈进行划分,得到至少一个散列值集合,并且散列值集合以散列值命名。
则在获取目标堆栈对应的目标集合时,可从散列值集合中,获取与上述指定路段的散列值相对应的散列值集合,上述的目标集合包括了指定路段的散列值所对应的散列值集合。
仍沿用前例,假定指定路段包括Route 5-7,其hash值分别为h5-h7,那么,可获取命名为h5、h6和h7的散列值集合,上述的目标集合包括命名为h5、h6和h7的散列值集合(简称为h5散列值集合、h6散列值集合和h7散列值集合)。
可由前述的分类单元202执行步骤1004。
S1005:堆栈分析服务器将上述预划分集合和目标集合进行取交集计算,得到目标交集集合。
以目标集合中的h7散列值集合与以关键词e命名的关键词集合取交集为例,得到的交集中的各堆栈均包含散列值为h7的路段,并且均包含关键词e。取交集时,是取两集合相交的那部分crash ID。以此类推,可得到目标集合与各关键词集合之间的交集,然后可对目标集合与各关键词集合之间的交集取并集,得到第一交集。
当然,用户也可设置或系统自动设置某一关键词集合为指定关键词集合,则可将目标集合与指定关键词集合进行取交集计算,得到第一交集。
而若设置了多个指定关键词集合,可分别将目标集合与各指定关键词集合进行取交集计算,得到目标集合与各指定关键词集合之间的交集,然后对各交集取并集,得到第一交集。或者,也可对各指定关键词集合取并集,得到关键词并集集合,然后将目标集合与关键词并集集合进行取交集计算,得到第一交集。
同理,以h7散列值集合与以项目X命名的项目集合取交集为例,得到的交集中的各堆栈均包含散列值为h7的路段,并且均属于项目X。以此类推,可得到目标集合与各项目集合之间的交集,然后可对目标集合与各项目集合之间的交集取并集,得到第二交集。
当然,也存在下述情况,用户设置或系统自动设置某一项目集合为指定项目集合,则可将目标集合与指定项目集合进行取交集计算,得到第二交集。
而若设置了多个指定项目集合,可分别将目标集合与各指定项目集合进行取交集计算,得到目标集合与各指定项目集合之间的交集,然后对各交集取并集,得到第二交集。或者,也可对各指定项目集合取并集,得到项目并集集合,然后将目标集合与项目并集集合进行取交集计算,得到第二交集。
进一步的,可对第一交集和第二交集取交集,以得到目标交集集合。
S1006:堆栈分析服务器对上述目标交集集合中的堆栈两两计算相似度。
如何计算相似度可参见前述S302的介绍,在此不作赘述。
需要说明的是,经过S1003-1005的处理,可将与目标堆栈“一眼”看去就不可能相似的堆栈除掉,目标交集集合中的堆栈数量会远远小于获取的堆栈总数N,从而在计算相似度时,可省去很多冗余计算。
S1007:堆栈分析服务器按相似度进行分类,得到包含目标堆栈的堆栈类。
可由前述的分类单元202执行步骤1002-1007。
堆栈分析服务器或分类单元202在得到一个堆栈类后,可从上述预划分集合中去掉已分类的堆栈,这样可进一步减少相似度的冗余计算。
之后,堆栈分析服务器或分类单元202可再任取一个未分类堆栈作为目标堆栈,重复S1004-S1007,直至没有未分类堆栈。
S1008:在分类完成后,堆栈分析服务器对各堆栈类按预设排序规则进行排序,并将排序结果发送给前端服务器。
在另一个示例中,可由前述的分类单元202对各堆栈类按预设排序规则进行排序,并将排序结果发送给上述前端服务器。相关细节请参考前述S303的记载,在此不作赘述。
S1009:前端服务器根据排序结果展示前R个(例如前10个)堆栈类。
相关细节请参考前述S303的记载,在此不作赘述。
与现有技术相比,本申请实施例具有如下优势:
一,可较为准确和有价值得给出两个Crash的相似程度的概念。而不是仅仅以文本相似度来考量堆栈,极大地增加了Crash聚类匹配的有效性和价值。
二,可以先通过预划分整理堆栈,只计算目标交集集合中两两堆栈之间的相似度,从而大幅度降低计算量。
三,利用最少命中层数,将最少命中层数之外的Route的散列值对应的散列集去除,这也是数量级级别上的降低计算量的方法。
采用本申请实施例,可以将120余个移动游戏(包含android和ios端)两天内上传的所有Crash堆栈进行一次聚类,聚类过程不超过5个小时。所处理的数据量平均值大约在120W/小时*24小时*2天=5760W个Crash堆栈,这个数字是个估计值,周末以及节假日的每小时上报堆栈数量的峰值会超过200W。因此,本申请实施例将海量堆栈聚类的复杂计算优化到了切实可行的程度,从实际的性能表现看,已经近乎o(N)的级别。
此外,除crash堆栈,本申请提供的方案可应用于其他方向。例如,可用于后台数据库中的玩家行为数据的聚类等。因为只要对行为数据进行合理的数据结构的规划,也可以得到route。因为玩家数据也会有先后顺序,例如用户买了礼盒,再打开礼盒。后台数据库存储了很多玩家的行为数据,例如购买商品的行为等。可利用玩家的行为数据,将具有同一兴趣的玩家进行聚类,进行统一的、有针对性的活动推广或广告投放。
另外,本申请使用到的关键词,可通过人工标注的方式进行甄别设置。也可使用机器学习算法或者深度学习算法,自动地从一个项目的堆栈中提取出关键词,从而降低人工的工作量。
专业人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、WD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (15)
1.一种堆栈分析方法,其特征在于,包括:
获取进程崩溃产生的各堆栈;所述堆栈为多层数据结构,每一层数据对应一个函数,相邻两层数据对应的函数之间存在调用关系,所述堆栈的栈顶位置是进程崩溃的位置;每一层数据为一数据帧,相邻两数据帧按照调用顺序组成的向量为路段;
根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类;其中,属于同一堆栈类的堆栈两两间的相似度大于或不小于相似度阈值;任一路段的权重至少根据所述任一路段中数据帧的位置决定,所述权重用于表征所述任一路段在堆栈中的重要程度。
2.如权利要求1所述的方法,其特征在于,所述根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类包括:
对所述获取的各堆栈进行预划分,得到至少一个预划分集合;
获取目标堆栈对应的目标集合;所述目标堆栈为任一未分类堆栈;在所述目标集合中,任一堆栈的至少一个路段与所述目标堆栈的指定路段相同;
将所述至少一个预划分集合和所述目标集合进行取交集计算,得到目标交集集合;
对所述目标交集集合中的堆栈两两计算相似度,按相似度进行分类,得到包含所述目标堆栈的堆栈类;其中,任意两堆栈间的相似度acc根据上述任意两堆栈所包含路段的权重和散列值计算得到。
3.如权利要求2所述的方法,其特征在于,所述获取的各堆栈进行预划分,得到至少一个预划分集合包括:
按关键词对所述获取的各堆栈进行预划分,得到至少一个关键词集合;任一关键词集合中的堆栈包含相同的关键词;
按项目对所述获取的各堆栈进行预划分,得到至少一个项目集合;同一项目集合中堆栈的项目相同;
所述关键词集合和所述项目集合均为预划分集合。
4.如权利要求3所述的方法,其特征在于,所述获取目标堆栈对应的目标集合包括:
按路段的散列值对所述获取的各堆栈进行预划分,得到至少一个散列值集合;任一散列值集合对应的散列值不同于其他散列值集合,所述任一散列值集合中的堆栈包含具有相同散列值的路段;
从所述至少一个散列值集合中,获取所述指定路段的散列值所对应的散列值集合;所述目标集合包括所述指定路段的散列值所对应的散列值集合。
5.如权利要求2-4任一项所述的方法,其特征在于,所述目标堆栈的指定路段通过如下方式确定:
将所述目标堆栈中连续M层数据帧对应的M-1个路段作为所述指定路段;
其中,所述连续M层数据帧中包括顶层数据帧;所述M为所述目标堆栈的最少命中层数,所述M根据所述目标堆栈的总层数N计算得到;所述连续M层数据帧对应的路段的权重之和,与所述目标堆栈的权重总和的比值,不大于所述相似度阈值m。
6.如权利要求2所述的方法,其特征在于,任意两堆栈表示为第一堆栈和第二堆栈,任意两堆栈间的相似度acc通过如下方式计算:
确定所述第一堆栈与所述第二堆栈之间散列值相同的路段;所述散列值相同的路段表示为相同路段;
将所述相同路段在所述第一堆栈中对应的权重相加,得到第一权重和x;
将所述相同路段在所述第二堆栈中对应的权重相加,得到第二权利和y;
计算所述第一堆栈的权重总和以及第二堆栈的权重总和,分别记为a和b;
采用公式计算所述第一堆栈和所述第二堆栈间的相似度。
7.如权利要求1所述的方法,其特征在于,任一路段的权重根据所述任一路段的位置标识计算得到。
8.如权利要求7所述的方法,其特征在于,所述任一路段的标识表示为n,所述任一路段包含的两数据帧表示为第一数据帧和第二数据帧;所述任一路段的权重v根据公式v=n*(n+1)/2+F1+F2计算得到;其中,F1表示所述第一数据帧的附加因子,F2表示所述第二数据帧的附加因子,当所述第一数据帧中包含关键词时,F1等于n/2,否则,F1等于0;当所述第二数据帧中包含关键词时,F2等于n/2,否则,F2等于0。
9.如权利要求1所述的方法,其特征在于,在分类完成后,还包括:对所述至少一个堆栈类按预设排序规则进行排序,并展示前R个堆栈类。
10.如权利要求9所述的方法,其特征在于,还包括:展示选定堆栈类中堆栈的解决方案。
11.一种堆栈分析装置,其特征在于,包括:
获取单元,用于获取进程崩溃产生的各堆栈;所述堆栈为多层数据结构,每一层数据为一数据帧;相邻两数据帧按照调用顺序组成的向量为路段;
分类单元,用于根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类;其中,属于同一堆栈类的堆栈两两间的相似度大于或不小于相似度阈值。
12.如权利要求11所述的装置,其特征在于,在所述根据获取的各堆栈中路段的权重进行分类,得到至少一个堆栈类的方面,所述分类单元具体用于:
对所述获取的各堆栈进行预划分,得到至少一个预划分集合;
获取目标堆栈对应的目标集合;所述目标堆栈为任一未分类堆栈;在所述目标集合中,任一堆栈的至少一个路段与所述目标堆栈的指定路段相同;
将所述至少一个预划分集合和所述目标集合进行取交集计算,得到交集;
对所述交集中的堆栈两两计算相似度,按相似度进行分类,得到包含所述目标堆栈的堆栈类;其中,任意两堆栈间的相似度acc根据上述任意两堆栈所包含路段的权重和散列值计算得到。
13.如权利要求12所述的装置,其特征在于,所述目标堆栈的指定路段包括所述目标堆栈中连续M层数据帧对应的M-1个路段;其中,所述连续M层数据帧中包括顶层数据帧;所述M为所述目标堆栈的最少命中层数,所述M根据所述目标堆栈的总层数N计算得到。
14.如权利要求13所述的装置,其特征在于,
所述装置还包括展示单元;
所述分类单元还用于在分类完成后,对所述至少一个堆栈类按预设排序规则进行排序,将排序结果提供给所述展示单元,由所述展示单元展示前R个堆栈类。
15.一种堆栈分析系统,其特征在于,至少包括堆栈分析服务器,所述堆栈分析服务器包括如权利要求11-14任一项所述的堆栈分析装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710676954.8A CN107402886B (zh) | 2017-08-09 | 2017-08-09 | 堆栈分析方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710676954.8A CN107402886B (zh) | 2017-08-09 | 2017-08-09 | 堆栈分析方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107402886A CN107402886A (zh) | 2017-11-28 |
CN107402886B true CN107402886B (zh) | 2018-12-11 |
Family
ID=60401150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710676954.8A Active CN107402886B (zh) | 2017-08-09 | 2017-08-09 | 堆栈分析方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107402886B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522209A (zh) * | 2018-09-29 | 2019-03-26 | 中国平安人寿保险股份有限公司 | 日志堆栈信息分析方法及装置、计算机装置及存储介质 |
CN110618940B (zh) * | 2019-09-19 | 2024-02-06 | 腾讯科技(深圳)有限公司 | 堆栈信息追踪方法、装置、计算机可读介质及计算装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183912A (zh) * | 2015-10-12 | 2015-12-23 | 北京百度网讯科技有限公司 | 异常日志确定方法和装置 |
CN106445701A (zh) * | 2016-09-21 | 2017-02-22 | 腾讯科技(深圳)有限公司 | 数据处理方法和装置 |
CN106844576A (zh) * | 2017-01-06 | 2017-06-13 | 北京蓝海讯通科技股份有限公司 | 一种异常检测方法、装置和监控设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8131722B2 (en) * | 2006-11-20 | 2012-03-06 | Ebay Inc. | Search clustering |
-
2017
- 2017-08-09 CN CN201710676954.8A patent/CN107402886B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183912A (zh) * | 2015-10-12 | 2015-12-23 | 北京百度网讯科技有限公司 | 异常日志确定方法和装置 |
CN106445701A (zh) * | 2016-09-21 | 2017-02-22 | 腾讯科技(深圳)有限公司 | 数据处理方法和装置 |
CN106844576A (zh) * | 2017-01-06 | 2017-06-13 | 北京蓝海讯通科技股份有限公司 | 一种异常检测方法、装置和监控设备 |
Also Published As
Publication number | Publication date |
---|---|
CN107402886A (zh) | 2017-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11537719B2 (en) | Deep neural network system for similarity-based graph representations | |
CN107613022B (zh) | 内容推送方法、装置及计算机设备 | |
Tatar et al. | From popularity prediction to ranking online news | |
US8843429B2 (en) | Action prediction and identification of user behavior | |
CN105431844B (zh) | 用于搜索系统的第三方搜索应用 | |
CN111222976B (zh) | 一种基于双方网络图数据的风险预测方法、装置和电子设备 | |
EP3356951B1 (en) | Managing a database of patterns used to identify subsequences in logs | |
US10896037B2 (en) | Method and apparatus for open source analytics for information handling systems | |
CN110706015B (zh) | 一种面向广告点击率预测的特征选取方法 | |
CN111275205B (zh) | 虚拟样本的生成方法、终端设备及存储介质 | |
EP3608799A1 (en) | Search method and apparatus, and non-temporary computer-readable storage medium | |
CN110929145A (zh) | 舆情分析方法、装置、计算机装置及存储介质 | |
CN109271624A (zh) | 一种目标词确定方法、装置及存储介质 | |
CN107402886B (zh) | 堆栈分析方法及相关装置 | |
CN106910135A (zh) | 用户推荐方法及装置 | |
CN103324641A (zh) | 信息记录推荐方法和装置 | |
CN110674397A (zh) | 年龄点预测模型的训练方法及装置、设备与可读介质 | |
EP3323100A1 (en) | A method and system for analyzing mobile apps | |
CN110532389B (zh) | 一种文本聚类方法、装置和计算设备 | |
CN109961163A (zh) | 性别预测方法、装置、存储介质及电子设备 | |
CN108229572B (zh) | 一种参数寻优方法及计算设备 | |
JPWO2011070979A1 (ja) | 辞書作成装置、単語収集方法、及び、プログラム | |
US9342795B1 (en) | Assisted learning for document classification | |
WO2023048807A1 (en) | Hierarchical representation learning of user interest | |
CN109446408A (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 |