并将其提供给开发人员;WER已经在运行的十几年内证明了其价值,收集了数十亿词崩溃报告,大大加快了开发人员的Debug流程,但另一方面,WER也仍存在一些问题,如“第二个Bucket问题”以及“长尾巴”问题(见下图)图片ReBucket 算法就是为了解决这些已知问题而产生的一种堆栈聚类算法算法流程及逻辑整体结构在ReBucket算法中,对于一系列新到达的崩溃信息(一个时间片内到达的崩溃信息),首先我们对其进行预处理,以提取简化的堆栈信息 然后使用层次聚类方法将崩溃报告聚类到相应的Bucket内;同时可以使用历史Bucket数据构建的训练模型训练在PDM中使用到的参数,下图为ReBucket算法的总流程图图片详细流程堆栈预处理在计算PDM f0f_0f0,f1f_1f1,f4f_4f4与C2C_2C2中的f0f_0f0,f2f_2f2,f6f_6f6匹配,则可以很明显地算出f4f_4f4和f6f_6f6的对齐偏移为2PDM(位置相关模型)在ReBucket {max}=1cmax=2,omax=2,dmax=1,训练中三个参数的学习率(步长)分别固定为0.1, 0.1, 0.01;根据每组参数预测的结果算出F值,最终返回能得到最大F值的参数组总结总的来说ReBucket
Rebucket作为一个成熟的堆栈相似度计算的算法,曾被微软用于解决bug上报的聚类问题。相比于普通的前缀匹配的检测算法,ReBucket能够提供12%的准确率提升。 我们期望利用Rebucket算法,找到那些重复出现的告警,从而提升用户体验,突出告警重点。 接下来来介绍一下ReBucket算法。 Rebucket算法的基本假设在于,越靠近栈顶的栈帧越能反应该堆栈的特征,因此在计算相似度中的权重应该越大。 由于rebucket算法计算比较复杂,因此本文在实现rebucket的时候采用了C++编写,并且使用了openmp做简单的加速。 参数的训练 在Rebucket计算堆栈之间的相似度的过程中,涉及到两个参数c,o。这两个参数反应了rebucket算法计算结果对于堆栈位置的敏感度。这一点可以从上文中的计算公式中看出来。
前言现有研究使用的stack trace距离度量主要有以下两种:information retrieval techniques(基于信息检索技术)string matching methods(基于字符串匹配技术)Rebucket Levenshtein Distance Calculation结合 machine learning 来构建stack trace之间相似度的度量,相比于单纯的string matching methods(如Rebucket prime}, S T^{\prime \prime}\right)$为$S T^{\prime}, S T^{\prime \prime}$的Levenshtein distance,但也可以替换为rebucket
stack trace距离度量主要有以下两种: information retrieval techniques(基于信息检索技术) string matching methods(基于字符串匹配技术) Rebucket Levenshtein Distance Calculation结合 machine learning 来构建stack trace之间相似度的度量,相比于单纯的string matching methods(如Rebucket \right)dist(ST′,ST′′)为ST′,ST′′S T^{\prime}, S T^{\prime \prime}ST′,ST′′的Levenshtein distance,但也可以替换为rebucket
ReBucket算法总结尽管在日常的开发工作中,开发团队已经在发布产品前花费大量资源和精力进行软件测试,但实际上,已发布的软件仍然有一些错误,而这些错误往往q表现为release版本运行时崩溃针对这个现象
Rebucket: 类型参数的rebucketing导致模糊性。 OpaqueTy: 不透明类型存在多个可能的类型参数。 AssociatedType: 关联类型的实现有多个可能。