通过使用趋势相关性的存储器泄漏分析的制作方法

文档序号:11160898阅读:509来源:国知局
通过使用趋势相关性的存储器泄漏分析的制造方法与工艺

存储器泄漏是计算机编程中的常见错误。它们出现在存储器被表观地或者实际地分配用于由程序使用、但是没有被使用并且由于它尚未被释放用于使用而将不被使用时。因此,存储器可能变成在效果上不可用于计算使用,直至进程重新启动和/或计算系统重新引导并且没有被系统和其它进程取用的所有存储器被再次标记为可用于使用。泄漏减少可用存储器的总数量,这最终地减少或者终止在系统上运行的软件的功能,直至系统被再次重新引导。泄漏的存储器最常见地是用户空间随机存取存储器(RAM),但是其它类型的存储器(比如内核RAM和硬盘存储装置)也经受到泄漏。



技术实现要素:

一些实施例涉及检测存储器泄漏这一技术问题。一些实施例涉及向软件开发者提供辅助对特定程序中的存储器泄漏的具体原因的标识的信息这一技术问题。一些实施例涉及这两个问题和/或计算领域技术人员清楚的其它问题。

实施例中的一些实施例通过辅助对在计算机(即,具有至少一个处理器和存储器的设备)上运行的软件程序中的存储器泄漏的检测来帮助改进计算机的运作。软件程序具有处理器负荷并且使用存储器。获得关于程序的存储器使用的数据。存储器使用数据包括共同地指定多个数据类型的存储器使用采样。每个存储器使用采样指定在指定的采样时间、用于数据类型中的至少一个数据类型的至少一个使用统计量的值。

一些实施例通过利用处理器来处理存储器使用数据的至少部分,来针对多个数据类型而计算地标识随时间的存储器使用趋势。利用标识的至少两个这样的趋势,这些实施例计算地搜索在数据类型存储器使用趋势之间的相关性。在找到相关性时,对相关的趋势(并且因此对它们的对应的数据类型)分组。也就是说,实施例计算地将数据类型分组成存储器使用趋势相关的组。给定的组中的数据类型往往关于存储器使用相似地表现。给定的存储器使用趋势相关的组中的所有数据类型具有满足预定趋势相关性标准的存储器使用趋势。其趋势不满足预定趋势相关性标准的数据类型不在给定的存储器使用趋势相关的组中。一些实施例然后显示关于分组的数据类型的存储器使用分析信息。例如,可以显示最迅速地泄漏数据类型的名称。作为另一示例,实施例可以显示开始时全部被示出几乎没有或者没有泄漏、并且然后全部被示出泄漏迸发、并且然后再次被示出几乎没有或者没有泄漏的一组数据类型的名称。

这里给出的这些和其它示例仅为说明性的。这一发明内容没有旨在于标识要求保护的主题内容的关键特征或者实质特征,它也没有旨在于用来限制要求保护的主题内容的范围。实际上,提供这一发明内容以(以简化形式)介绍以下在具体实施方式中进一步描述的一些技术概念。利用权利要求定义创新,并且在这一发明内容与权利要求冲突的范围内,应当以权利要求为准。

附图说明

将参照附图给出更具体描述。这些附图仅图示了选择的方面,并且因此没有完全地确定覆盖或者范围。

图1是图示了计算机系统并且也图示了配置的存储介质(有别于仅传播的信号)实施例的框图,该计算机系统具有在可以针对存储器泄露被分析的软件、可以分析存储器泄漏的软件或者二者的控制之下相互交互的至少一个处理器和至少一个存储器以及在可以在多个网络节点上存在的操作环境中的其它项目;

图2是图示了在示例架构中、通过经由使用趋势相关性的存储器泄漏分析来改进计算系统功能的工具和技术的方面的框图;

图3是图示了一些进程和配置的存储介质实施例的步骤的流程图;

图4是图示了在示例架构中、通过使用趋势相关性的存储器泄漏分析的方面的数据流图;

图5是图示了数据类型的示例存储器使用趋势(也被称为例如“类型趋势”或者“使用趋势”)的图表;

图6是图示了使用线性回归以将图5的存储器使用趋势拟合到线性函数以促进对于在数据类型存储器使用趋势之间的相关性的搜索和/或提供存储器使用分析信息(比如估计的泄漏速率和估计的泄漏大小)的图表;

图7是图示了相关的两个存储器使用趋势(也被称为例如“接近地有关的趋势”或者“有关的趋势”)的图表;

图8是图示了不相关的两个存储器使用趋势(也被称为例如“无关的趋势”)的图表;

图9是图示了即使其相应的增长速率不同也仍然相关的两个存储器使用趋势的图表;

图10是图示了可以用来呈现关于数据类型的存储器使用分析信息的许多可能的图形用户界面(GUI)中的一些GUI的屏幕描绘;

图11是示出用于数据类型之一的扩展的细节的、图10的GUI的不同屏幕描绘;以及

图12是图示可类型直方图的内容的表格。

具体实施方式

首字母缩写词和简写词

以下定义了一些首字母缩写词和简写词,但是其它首字母缩写词和简写词可以在这里别处加以定义或者无需定义即为本领域技术人员所理解。

ALU:算术和逻辑单元

API:应用程序接口

App:应用

CD:紧致盘

CPU:中央处理单元

DVD:数字万用盘或者数字视频盘

FPGA:现场可编程门阵列

FPU:浮点处理单元

GC:垃圾收集

GPU:图形处理单元

GUI:图形用户界面

IDE:集成开发环境,有时也被称为“交互开发环境”

PII:个人可标识信息

RAM:随机存取存储器

ROM:只读存储器

概述

存储器泄漏检测是困难问题和重要的问题。在许多计算系统中,每个进程得到虚拟地址空间。存储器泄漏消耗虚拟地址空间以及物理存储器(直至存储器页面得以被分页到盘)。对于应用存储器泄漏,重新启动进程可以使分配的存储器返回到系统,但是重新启动并不总是方便的。在一些计算系统(比嵌入式系统或者缺乏分离进程地址空间的系统)中,使丢失的存储器返回到系统可能需要重新引导整个系统。一些熟悉的方式依赖于对大存储器转储的收集和分析,而这里描述的实施例提供了一种用于转储分析的备选方式(或者有帮助的前序)。转储分析经常涉及从部署环境收集存储器转储并且将转储文件移动到开发环境以用于利用存储器工具分析。通常地,两个或者更多转储在不同时间点被收集和差异化(也被称为diff)以标识已经增加了引用的对象的大小/计数的存储器分配树根。这一过程的繁重和复杂性使得存储器泄漏检测对于普通开发者而言不是很上手,并且经常看见这一任务找到团队中的最有技能的开发者。

存储器转储的一个优点是它们具有引用图表信息。利用这一信息和足够时间,将最可能标识存储器泄漏问题的来源。转储也可以具有可以在一些分析中有用的实例信息。例如,能够检查串的值以猜测它来自何处可能有帮助。缺点是可能泄漏PII,并且因此值可能没有在所有情形中可用。

存储器转储也具有缺点。对转储的收集通常地对机器的性能具有负面影响。因此,如果这在用于web app的生产服务器上被完成,则将看见app的每秒请求数的显著下降。转储也是庞大的,因此它们占用大量驱动空间,并且在机器之间移动它们减少可用网络带宽。存储器转储分析通常涉及在存储器堆树内筛查以找到具有大于预计的引用的节点或者在正diff的情况下找到大小/计数的登记的最大增加的节点。这固有地是繁琐的过程。另外,对应用的请求负荷经常对转储的内容具有影响,并且因此影响diff过程。转储内容也在环境之间变化。当在垃圾收集环境中捕获引用图表时,它通常不包含对垃圾的引用,而是仅包含活跃(具有至少一个引用)的的对象。在非垃圾收集环境中,引用的存储器的泄漏以及未引用但是从未被释放的存储器的泄漏可能出现。

可以在更广义的情境中查看这里描述的一些实施例。例如,概念(比如相关性、存储器使用、采样和趋势)可以与一个具体实施例相关。然而,它没有得自于如下广义情境的可用性:这里在专有权中寻求抽象想法;它们没有。实际上,本公开内容聚焦于提供其技术效果完全地或者部分地解决了特定技术问题的适当地专属的实施例。涉及相关性、存储器使用、采样和/或趋势的其它介质、系统和方法在本范围以外。因而,在对本公开内容的恰当理解之下也避免了含糊、仅抽象、缺乏技术特点和附带的证明问题。

实施例的性质

这里描述的实施例的技术特点将为本领域普通技术人员所清楚,并且也将在若干方式中为广泛留心的读者所清楚。首先,一些实施例解决技术问题,比如检测存储器泄漏的存在和提供帮助开发者更高效地标识存储器泄漏的来源的信息。第二,一些实施例包括技术部件,比如以超出在通用计算机内的典型交互的方式与软件交互的计算硬件。例如,除了正常交互(比如一般的存储器分配、一般的存储器读取和写入、一般的指令执行以及某类I/O)之外,这里描述的一些实施例标识数据类型存储器使用趋势、搜索相关的数据类型存储器使用趋势并且显示关于相关性及其构成趋势和数据类型的信息。第三,由一些实施例提供的技术效果最终地包括通过去除存储器泄漏对软件功能的高效改进而没有依赖于对存储器转储的收集、传送和分析。其它技术效果也将在阅读本公开内容时为本领域技术人员所清楚。

本领域技术人员理解,技术效果是一个技术实施例的假定目的。例如,在一个实施例中涉及计算并且没有技术部件(例如,用纸和笔或者甚至脑力步骤)也可以执行一些计算这仅有的事实没有去除技术效果的存在或者变更实施例的具体和技术性质。

参照示例实施例(比如在附图中图示的实施例),并且这里使用具体言语描述它们。但是本领域并且拥有本公开内容的技术人员将想到的、这里图示的特征的变更和更多修改以及由这里的具体实施例举例说明的抽象原理的附加技术应用应当被视为在权利要求的范围内。

术语

在本公开内容中阐明术语的含义,因此阅读权利要求应当仔细注意这些阐明。给出了具体示例,但是本领域技术人员将理解,其它示例也可以落入使用的术语的含义内和一个或者多个权利要求的范围内。术语未必具有它们在一般使用中(特别地在非技术使用中)或者在特定行业的使用或者在特定一个词典或者词典集合中具有的相同含义。标号可以与各种措词一起被使用以帮助示出术语的广度。从给定的一段文本省略标号未必意味着附图的内容没有被文本讨论。发明人主张和实行他们对他们自己的词典编撰的权利。明确地定义引用的术语,但是在隐含地定义术语时没有使用引号。这里在具体实施方式中和/或在申请文件中别处明确地或者隐含地定义术语。

如这里所用,“计算机系统”可以例如包括一个或者多个服务器、母板、处理节点、个人计算机(便携或否)、个人数字助理、智能电话、蜂窝或者移动电话、至少具有处理器和存储器的其它移动设备和/或提供至少部分由指令控制的一个或者多个处理器的其它设备。指令可以是以在存储器和/或专门化的电路中的固件或者其它软件的形式。具体而言,虽然可以出现许多实施例在工作站或者膝上型计算机上运行,但是其它实施例可以在其它计算设备上运行,,并且任何一个或者多个这样的设备可以是给定的实施例的部分。

“多线程”计算机系统是支持多个执行线程的计算机系统。术语“线程”应当被理解为包括能够或者受到调度(和可能的同步)的任何代码,并且也可以被称为其它名称,如例如“任务”、“进程”或者“协同例程”。线程可以并行、依次或者在并行执行(例如,多处理)和依次执行(例如,时间分片)的组合中运行。已经在各种配置中设计了多线程环境。执行线程可以并行运行,或者线程可以被组织用于并行执行,但是实际地取得多轮依次执行。可以例如在多处理环境中在不同核上执行不同线程、通过在单个处理器核上时间分片不同线程或者通过时间分片和多处理器线程的某个组合来实施多线程。线程情境切换可以例如由内核的线程调度器、由用户空间信号或者由用户空间和内核操作的组合发起。线程可以依次对共享的数据的多轮操作,或者每个线程可以例如对它自己的数据操作。

“逻辑处理器”或者“处理器”是单个独立硬件线程处理单元,比如在同时多线程实现方式中的核。作为另一示例,每个核运行两个线程的超线程四核芯片具有八个逻辑处理器。逻辑处理器包括硬件。术语“逻辑”用来防止给定的芯片具有至多一个处理器这样的错误结论;这里可互换地使用“逻辑处理器”和“处理器”。处理器可以是通用的,或者它们可以被定制用于专属使用,比如图形处理、信号处理、浮点算术处理、加密、I/O处理等等。

“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境出现在各种配置中。在一个给定的配置中,所有处理器可以功能等同,而在另一配置中,一些处理器可以借助具有不同硬件能力、不同软件指派或者二者而不同于其它处理器。根据配置,处理器可以在单个总线上被相互紧密地耦合,或者它们可以被松散地耦合。在一些配置中,处理器共享中央处理器,在一些配置中,它们各自具有它们自己的本地处理器,并且在一些配置中,共享和本地存储器二者存在。

“内核”包括操作系统、管理程序、虚拟机、BIOS代码和相似硬件接口软件。

“代码”意味着处理器指令、数据(包括常数、变量和数据结构)或者指令和数据二者。

这里广义地使用“程序”以包括应用、内核、驱动程序、中断处置程序、库和由程序员(也被称为开发者)编写的其它代码。

如这里所用,“包括(include)”除非另有陈述则允许附加元素(即包括(include)意味着包括(comprise))。“由……构成”意味着实质上或者完全由……构成。在可以自由地变更、去除和/或添加X的如果有的非Y部分而没有只要涉及讨论的权利要求就变更要求保护的实施例的功能时,X实质上由Y构成。

“进程(process)”这里有时用作计算科学领域的术语并且在该技术意义上涵盖资源用户、即例如协同例程、线程、任务、中断处置程序、应用进程、内核进程、过程(procedure)和对象方法。“过程(process)”这里也用作专利法领域术语,例如,在描述过程权利要求有别于系统权利要求或者制造品(配置的存储介质)权利要求时。相似地,“方法”这里有时用作计算科学领域中的技术术语(一种“例程”)并且也用作专利法领域术语(“过程(process)”)。本领域技术人员将理解在特定实例中旨在于是哪个含义,并且也将理解有时可以使用一个或者多个进程或者方法(在计算科学意义上)实施给定的要求保护的过程或者方法(在专利法意义上)。

“自动地”意味着通过使用自动化(例如,由软件配置用于这里讨论的专属操作和技术效果的通用计算硬件)有别于没有自动化。具体而言,“自动地”执行的步骤没有在纸上用手或者在人的头脑中执行,尽管它们可以由人类发起或者由人类交互地指导。用机器执行自动步骤以便获得没有用这样提供的技术交互就不会实现的一个或者多个技术效果。

“计算地(computationally)”类似地意味着使用计算设备(至少处理器加上存储器)并且排除通过仅人类思考或者仅人类动作获得结果。例如,用笔和纸做算术不是如这里理解的那样计算地进行算术。计算结果更快速、更广泛、更深入、更准确、更一致、更全面和/或以别的方式提供超出单独人类执行的范围的技术效果。“计算步骤”是被计算地执行的步骤。“自动地”或者“计算地”均未必地意味着“立即地”。这里可互换地使用“计算地”和“自动地”。

“前摄地”意味着没有来自用户的直接请求。实际上,用户甚至直至已经向用户呈现了一个实施例的前摄步骤的结果才认识到该步骤是有可能的。除非另有陈述,否则也可以前摄地完成这里描述的任何计算和/或自动步骤。

贯穿文本,使用可选复数意味着指示的特征中的一个或者多个特征存在。例如,“处理器”意味着“一个或者多个处理器”或者等效地意味着“至少一个处理器”。

贯穿本文,除非另有明确地陈述,对过程中的步骤的任何引用假定该步骤可以由兴趣方直接地执行和/或由该方通过干预机制和/或干预实体间接地执行而仍然落在该步骤的范围内。也就是说,如果直接执行不是明确地陈述的要求,就没有要求由兴趣方直接执行该步骤。例如,涉及兴趣方的动作(比如关于目的地或者其它主体分配、分析、计算、相关、取消分配、确定、显示、估计、拟合、绘图、分组、标识、指示、正规化、获得、执行、处理、采样、满足、搜索、指定(或者分配、已分配、分析、已分析等)的步骤)可以涉及某个其它方的干预动作(比如转发、复制、上传、下载、编码、解码、压缩、解压、加密、解密、认证、调用等等),而仍然被理解为由兴趣方直接地执行。

无论何时参照数据或者指令,应理解这些项目配置计算机可读存储器和/或计算机可读存储介质,由此将它变换成特定物品,例如,有别于简单地存在于纸上、人的脑海中或者仅为在接线上传播信号。除非在权利要求中以别的方式明确地陈述,否则权利要求没有覆盖信号本身。为了在美国的专利保护,存储器或者其它计算机可读存储介质不是在In re Nuijten案例的美国专利和商标局(USPTO)解释之下的可授予专利的主题内容的范围以外的传播信号或者载波。

另外,尽管这里别处有任何明显地相反之处,但是将理解在(a)一个方面的计算机可读存储介质和计算机可读存储器与(b)另一方面的传输介质(也被称为信号介质)之间的清楚不同。传输介质是传播信号或者载波计算机可读介质。对照而言,计算机可读存储介质和计算机可读存储器不是传播信号或者载波计算机可读介质。在美国,“计算机可读介质”意味着计算机可读存储介质而不是传播信号本身。

“实施例”在这里是示例。术语“实施例”与“本发明”不可交换。实施例可以自由地共享或者借用各方面以产生其它实施例(假如结果可操作),即使这里没有明确地描述所得方面组合本身。要求明确地描述每一个允许的组合对于本领域技术人员没有必要并且将与如下政策相矛盾,这些政策公认专利说明书是为作为本领域技术人员的读者而撰写的。关于由甚至少量可组合的特征产生的可能组合的数目的正式组合计算和非正式普遍直觉也将指示大量方面组合对于这里描述的方面是存在的。因而,要求明确记载每一个组合将与如下政策有矛盾,这些政策需要专利说明书简明而读者在涉及的技术领域内有知识。

操作环境

参照图1,用于一个实施例的操作环境100可以包括计算机系统102。计算机系统102可以是多处理器计算机系统或者不是。操作环境可以包括给定的计算机系统中的可以被群集、客户方-服务器联网和/或对等联网的一个或者多个机器。个别机器是计算机系统,并且一组协作机器也是计算机系统。可以配置给定的计算机系统102以用于终端用户,例如,与应用一起、用于管理员、作为服务器、作为分布式处理节点和/或以其它方式。

人类用户104可以通过使用显示器、键盘和其它外围设备106经由键入的文本、触摸、语音、移动、计算机视觉、手势和/或其它形式的I/O来与计算机系统102交互。用户界面可以支持在一个实施例与一个或者多个人类用户之间的交互。用户界面可以包括命令行界面、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面和/或其它界面呈现。例如,可以在本地台式计算机上或者在智能电话上生成用户界面,或者可以从web服务器生成并且向客户端发送它。用户界面可以被生成作为服务的部分,并且它可以与其它服务(比如社交联网服务)集成。给定的操作环境包括支持这些不同用户界面生成选项和使用的设备和基础结构。

自然用户界面(NUI)操作可以例如使用话音识别、触摸和触笔识别、在屏幕上和与屏幕相邻二者的手势识别、空气手势、头部和眼睛跟踪、语音和话音、视觉、触摸、手势和/或机器智能。NUI技术的一些示例包括触敏显示器、语音和话音识别、意图和目标理解、使用深度相机(比如立体相机系统、红外线相机系统、RGB相机系统及其组合)的运动手势检测、使用加速度计/陀螺仪的运动手势检测、脸部识别、3D显示器、头部、眼睛和凝视跟踪、沉浸式增强现实和虚拟现实系统,所有这些示例提供更自然的界面以及用于使用电场感测电极(脑电图和有关的工具)来感测脑部活动的技术。

本领域技术人员将认识到,这里在“操作环境”之下呈现的前述方面和其它方面也可以形成一个给定的实施例的部分。本文的标题没有旨在于提供将特征严格分类成实施例和非实施例特征类。

作为另一示例,游戏可以驻留在Microsoft XBOX(微软公司的商标)服务器上。可以从控制台购买游戏,并且可以完全或者部分在服务器上、在控制台上或者在二者上执行它。多个用户可以与使用标准控制器、空气手势、语音或者使用配套设备(比如智能电话或者平板计算机)的游戏交互。给定的操作环境包括支持这些不同使用场景的设备和基础结构。

系统管理员、开发者、工程师和终端用户各自是特定类型的用户104。代表一个或者多个人进行动作的自动化代理、脚本、回放软件等也可以是用户104。存储设备和/或联网设备可以在一些实施例中被视为外围设备。在图1中未示出的其它计算机系统可以例如经由网络接口设备、使用与网络108的一个或者多个连接来与计算机系统102或者与另一系统实施例以技术方式交互。

计算机系统102包括至少一个逻辑处理器110。计算机系统102如同其它适当系统也包括一个或者多个计算机可读存储介质112。介质112可以是不同物理类型。介质112可以是易失性存储器、非易失性存储器、固定就位的介质、可去除介质、磁介质、光介质、固态介质和/或其它类型的物理耐用存储介质(有别于仅传播的信号)。具体而言,配置的介质114、比如便携(即,外部)硬驱动、CD、DVD、记忆棒或者其它可去除非易失性存储器介质可以在被插入或者以别的方式安装时在功能上变成计算机系统的技术部分,从而使得它的内容可访问以用于与处理器110的交互和由处理器110使用。可去除的配置的介质114是计算机可读存储介质112的示例。计算机可读存储介质112的一些其它示例包括用户104不容易可去除的内置RAM、ROM、硬盘和其它存储器存储设备。为了符合当前美国专利要求,计算机可读介质和计算机可读存储介质以及计算机可读存储器都不是信号本身。

向介质114配置可由处理器110执行的指令116;这里在广义上使用“可执行”以例如包括机器代码、可解译代码、字节代码和/或在虚拟机上运行的代码。也可以向介质114配置通过执行指令116来创建、修改、引用和/或以别的方式以求技术效果的数据118。指令116和数据118配置它们驻留在其中的存储器或者其它存储介质114;在该存储器或者其它计算机可读存储介质是给定的计算机系统的功能部分时,指令116和数据118也配置该计算机系统。在一些实施例中,数据118的一部分代表现实项目,比如产品特性、库存、物理测量、设置、图像、读数、目标、容量等等。也通过备份、恢复、提交、放弃、重新格式化和/或其它技术操作来变换这样的数据。

虽然可以将一个实施例描述为由计算设备(例如,通用计算机、蜂窝电话或者游戏控制台)中的一个或者多个处理器执行的软件指令,但是这样的描述没有意味着穷举所有可能实施例。本领域技术人员将理解,经常也可以全部或者部分直接地在硬件逻辑中实施相同或者相似功能以提供相同或者相似技术效果。备选地或者除了软件实现方式之外,这里描述的技术功能还可以至少部分由一个或者多个硬件逻辑部件执行。例如而没有排除其它实现方式,一个实施例可以包括硬件逻辑部件,比如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统部件(SOC)、复杂可编程逻辑器件(CPLD)和相似部件。一个实施例的部件可以例如基于它们的输入、输出和/或它们的技术效果而被分组成交互功能模块。

在所示的环境100中,一个或者多个程序120具有包括数据类型124和数据项目126(例如,对象实例、记录、结构、节点、数组和链接的数据结构)的代码122。在执行期间,程序120具有处理负荷128,该处理负荷128例如包括搜索、排序、创建、更新或者以别的方式计算地处理数据项目。程序120使用存储器112以实现它的处理,并且在许多情况下,该存储器112中的一些是以堆存储器130的形式。堆存储器可以经受到自动垃圾收集和/或可以由程序120直接地管理。其它形式的存储器112一般地也由程序直接地或者间接地使用,比如盘存储装置、栈存储器和内核空间存储器。可以收集指示正在使用或者使用过存储器112(具体为堆存储器130)的使用数据132。

在各附图中示出和/或在正文中讨论的代码122、使用数据132和其它项目可以各自部分地或者完全地驻留在一个或者多个硬件介质112内,由此配置那些介质以求超出在所有硬件-软件协作操作中固有的“正常”(即最普遍常见)交互以外的技术效果。除了处理器110(CPU、ALU、FPU和/或GPU)、存储器/存储介质112显示器134和电池之外,操作环境也可以包括其它硬件,如例如总线、功率供应、有线和无线网络接口卡和加速器,这里在本领域技术人员尚不清楚的程度上描述它们的相应操作。CPU是中央处理单元,ALU是算术和逻辑单元,FPU是浮点处理单元,并且GPU是图形处理单元。

给定的操作环境100可以包括集成开发环境(IDE)136,该IDE 136向开发者提供协同软件开发工具,比如编译器、源代码编辑器、分析器、调试器等等的集合。工具138也可以存在于任何IDE136以外。用于一些实施例的一些适合的操作环境包括或者帮助创建被配置为支持程序开发的Visual(微软公司的商标)开发环境。一些适当的操作环境包括环境(OracleAmerica公司的商标),并且一些操作环境包括使用语言(比如C++或者C#(“C-Sharp”))的环境,但是这里的教导可与广泛多种编程语言、编程模型和程序一起可适用。

在各附图中以轮廓形式示出了一个或者多个项目以强调它们未必地是所示操作环境或者所有环境的部分,而是可以与在如这里讨论的操作环境或者一些实施例中的项目互操作。没有遵循在任何附图或者任何实施例中必然地需要没有以轮廓形式示出的项目。具体而言,提供图1是为了方便;在图1中包括一个项目没有意味着在当前创新之前已知该项目或者对该项目的描述的使用。

系统

图2图示了适合用于与一些实施例一起使用的架构的方面。存储器使用数据132包括采样202,这些采样202示出了用于特定数据类型124(比如类或者其它由用户定义的数据类型)的存储器112使用统计量204,从而例如示出了在创建该数据类型的实例时被分配的存储器。使用统计量204的值206可以是项目(例如,实例)的数目的计数,或者值206可以跟踪例如以字节或者字或者页面或者扇区为单位的已使用存储器空间的数量。值206具有指示何时获得值的对应的采样时间208。采样因此相互离散。然而,可以相对于采样的变量的改变的速率如此接近地在一起来取得采样以至于有效地连续。

存储器分析工具210可以使用一个或者多个趋势相关性标准212来处理存储器使用数据132,以产生用于个别数据类型124或者多组数据类型的存储器使用趋势,并且通过标识相关的数据类型存储器使用趋势214来标识相关的多组216数据类型。然后,可以使用分组和其它存储器使用分析信息218例如作为用于重新启动过程的基础。可以向用户(比如软件开发者)显示信息218。一般地在屏幕或者其它显示器134上的GUI 220中显示信息218,但是信息218的一些或者所有信息也可以通过向文件写入它或者打印硬拷贝或者跨网络108传输它来在目的地显示来被“显示”。存储器使用分析信息218可以例如包括数据类型名称222、泄漏速率224、指示已丢失存储器空间的泄漏大小226和/或指示已丢失存储器空间中的数据项目的数目的泄漏计数228。趋势相关性标准212可以例如包括相关性系数230、相关性系数阈值232和/或相关性协方差234。例如,在一些实施例中,标准包括用来测量相关性的技术和用于匹配的选择标准(可以是阈值),例如,{Pearson的系数,>0.6}。

参照图1和图2,一些实施例向计算机系统102提供逻辑处理器110和存储器介质112,该逻辑处理器110和存储器介质112由电路、固件和/或软件配置,以通过利用如这里描述的工具210和其它创新扩展功能来提供技术效果,比如关于涉及技术问题(比如检测和去除存储器泄漏)的数据类型专属存储器使用趋势的相关性找到。相关性找到指示趋势在陈述的标准212之下是否相关,并且也可以指示相关性的程度,例如,为趋势计算出的相关性系数。

在一些实施例中,外围设备106(比如人类用户I/O设备(屏幕、键盘、鼠标、平板计算机、麦克风、扬声器、运动传感器等))将存在与一个或者多个处理器110和存储器的可操作通信。然而,也可以在技术系统中深度地嵌入一个实施例,从而使得没有人类用户104与该实施例直接地交互。软件过程可以是用户104。

在一些实施例中,存储器分析计算机系统102被配置有用于改进存储器分析计算机系统本身的运作或者另一计算机系统的运作的存储器分析辅助210。功能的改进例如通过辅助对软件120中的存储器泄漏的检测而被提供,该软件120具有处理负荷128并且使用存储器112。存储器分析计算机系统包括逻辑处理器110和与逻辑处理器可操作地通信的存储器112。趋势相关性标准212驻留在存储器112中作为显式值,或者隐式地驻留在指令116中。标准212可以例如是单个阈值232,或者阈值和有关要求的布尔组合,例如,标准212可能需要“大于0.5的Pearson乘积-瞬间相关性系数或者大于0.5的Spearman秩相关性系数”。这里,如这里别处一样,“或者”除非另有陈述则为非排他性、也就是说,“或者”意味着“和/或”。

驻留在存储器112中的存储器分析工具210具有可由处理器110执行以针对多个数据类型124而标识随时间的相应的存储器使用趋势的指令116。工具210也具有指令116,该指令116可执行以搜索在数据类型存储器使用趋势214之间的相关性并且将数据类型分组成存储器使用趋势相关的组216。对趋势214的分组对应于对趋势代表的数据类型124分组。给定的存储器使用趋势相关的组中的所有数据类型具有满足趋势相关性标准的存储器使用趋势,并且其趋势不满足趋势相关性标准的数据类型不在给定的存储器使用趋势相关的组中。

在一些实施例中,趋势相关性标准212包括在范围从-1到+1的相关性系数标度上具有至少0.45的绝对值的相关性阈值232。这一包括可以被实现为例如作为硬编码的常数、作为可配置的默认或者不考虑的默认,和/或作为有条件执行指令116。也可以使用其它阈值232值,例如,0.4、0.5、0.55,或者任何值是范围,例如,阈值可以在从0.4到0.6的范围中。阈值232可以例如根据应用120和存储器使用模式而变化。一般而言,设置高阈值增加在找到真正地有关的类型时的置信度,但是太高的阈值将在选择什么时限制太多。设置低阈值将在分析中包括更多类型,但是结果可能有噪声。在一些实施例中,阈值和/或相关性方法(Pearson、Spearman等)交互地可由用户配置。

在一些实施例中,存储器分析计算机工具210至少部分通过对于数据类型存储器使用趋势计算一个或者多个特定种类的相关性系数230或者相关性协方差234来搜索在数据类型存储器使用趋势214之间的相关性。一些示例包括用于数据类型存储器使用趋势214的Pearson乘积-时刻相关性系数、Spearman秩相关性系数、Kendall秩相关性系数、任何统计上显著的相关性系数或者距离相关性。

一些实施例仅执行趋势标识和相关性功能并且然后存储结果或者传输结果以用于以后使用。一些实施例将示出超出指定的阈值的存储器丢失的结果视为用于重新启动有损进程120的触发条件。然而,存储器分析计算机系统102的一些其它实施例包括显示器134,并且存储器分析工具210包括软件,该软件显示信息218、比如在显示的信息中被标识为具有最多存储器泄漏的组216中的数据类型的数据类型名称222和/或在被标识为具有用户定义的数据类型124的最多存储器泄漏的组216中的用户定义的数据类型的数据类型名称222。存储器使用分析信息218也可以包括或者备选地包括用于特定数据类型124的估计的泄漏大小226、用于特定数据类型124的每单位时间的存储器大小的估计的泄漏速率224、用于特定数据类型的泄漏的项目126的估计的泄漏的项目计数228和/或用于特定数据类型的每单位时间的项目计数的估计的泄漏速率224。在一些实施例中,存储器分析工具图形用户界面220显示数据类型存储器使用趋势的图形322。图形标度可以例如是线性或者对数的,并且可以随时间绘制存储器大小和/或数据项目计数。散点图、条形图和其它熟悉的图形格式可以用来显示由创新工具210获得和处理的数据。

在一些实施例中,系统包括由网络连接的多个计算机。联网接口设备可以使用可以在给定的计算机系统中存在的部件(如例如分组交换网络接口卡、无线收发器或者电话网络接口)来提供向网络108的接入。然而,一个实施例也可以通过直接存储器存取、可去除非易失性介质或者其它信息存储-取回和/或传输方式来传达技术数据和/或技术指令,或者在计算机系统中的一个实施例可以在没有与其它计算机系统通信的情况下操作。

一些实施例在“云”计算环境和/或“云”存储环境中操作,在该环境中没有拥有但是按照需求提供计算服务。例如,其存储器使用将被分析的程序120可以在联网云中的一个或者多个设备/系统102上运行,可以在云内的更多其它设备上存储和/或处理程序的存储器使用数据132,并且存储器分析工具210输出可以配置更多其它云设备/系统102上的显示器134。

过程

图3在流程图300中图示了一些过程实施例。在各图中示出或者以别的方式公开的计数过程可以在一些实施例中例如在脚本的控制或者之下由存储器分析工具210自动地执行,或者以别的方式需要很少或者不需要同时活的用户输入。除非另有指示,也可以部分自动地和部分手动地执行过程。在一个给定的实施例中,可以重复过程的零个或者更多个所示的步骤、可能有待操作于的不同参数或者数据。也可以在与在图3中布局的由上至下顺序不同的顺序中完成在一个实施例中的步骤。可以串行地、以部分地重叠方式或者完全地并行来执行步骤。流程图300被遍历以指示在过程期间执行的步骤的顺序可以从过程的一个执行到过程的另一执行而变化。流程图遍历也可以从一个过程实施例到另一过程实施例变化。步骤也可以被省略、组合、重新命名、重新分组或者以别的方式脱离所示流程,只要执行的过程可操作并且符合至少一个权利要求。

这里提供示例以帮助举例说明本技术的各方面,但是在本文中给出的示例没有描述所有可能实施例。实施例不限于这里提供的具体实现方式、布置、显示、特征、方式或者场景。一个给定的实施例可以例如包括附加或者不同技术特征、机制和/或数据结构并且可以以别的方式脱离这里提供的示例。

一些实施例提供用于通过辅助检测在具有处理负荷并且使用存储器的软件程序中的存储器泄漏来改进计算机(膝上型、智能电话、平板计算机、工作站、服务器盒、嵌入式系统等)的运作的过程。在一些实施例中,过程包括获得302存储器使用数据132。这可以使用熟悉的技术(比如代码仪表化、存储器转储分析、存储器分配器仪表化存储器分配器监视和/或垃圾收集监视)而被实现,这些技术适于提供用于感兴趣的一个或者多个特定数据类型124的数据采样202。存储器使用采样202共同地指定多个数据类型124,其中每个个别存储器使用采样指定在指定的采样时间208用于数据类型中的至少一个数据类型的至少一个使用统计量204的值206。使用统计量的一些示例是存储器大小(以字节、字、页面、扇区或者另一熟悉的单位为单位)和项目计数(其中项目是程序120为其分配一段存储器作为单位的对象、记录、结构、节点或者其它项目)。

在一些实施例中,过程包括针对多个数据类型而计算地标识304随时间的相应存储器使用趋势。这例如通过利用处理器处理存储器使用数据的至少部分而被计算地实现;本领域技术人员将认识到,试图用脑力或者用手标识这些趋势将是愚蠢和无益的努力。具体而言,可以(部分地或者全部地)通过在采样202之间计算地插值以获得代表趋势的逐段(piecewise)线性函数或者另一函数的节段来实现趋势标识。可以(部分地或者全部地)通过计算地拟合存储器使用数据到线性或者逐段线性或者非线性曲线来实现趋势标识304。拟合可以例如使用线性或者非线性回归与最小平方或者另一度量。最小平方本身包括各种选项,例如,普通最小平方、广义最小平方、百分比最小平方等等。此外,注意,异常采样可以在它们没有统计地显著时被排除。

在一些实施例中,过程包括计算地搜索306在数据类型存储器使用趋势之间的相关性。可以通过计算在多对或者其它多个元组的趋势214之间的距离的协方差、相关性或者其它统计测量然后比较结果与预定阈值232和/或一些或者所有其它计算的统计测量来实现搜索306。例如,具有比用户指定的阈值0.6更大的计算的相关性系数的任何一对或者其它元组的趋势在一些实施例中被视为相关。作为另一示例,具有其绝对值比默认但是可重配置的阈值0.4更大的计算的相关性系数的任何元组的趋势214在一些实施例中被视为相关。作为另一示例,无论哪个汇集的多达N个趋势214具有为利用给定的存储器使用数据132标识的所有趋势214的给定的汇集而计算出的最大相关性系数(该系数的值可能是无论任何值)在一些实施例中被视为相关。在本文中,“预定”意味着在比较计算的统计测量之前指定。不同统计测量和/或不同阈值值定义不同趋势相关性标准212。

一些实施例基于计算的统计测量计算地将数据类型124分组308成存储器使用趋势相关的组216。因此,在给定的存储器使用趋势相关的组中的所有数据类型具有满足预定趋势相关性标准212的存储器使用趋势,而其趋势没有满足预定趋势相关性标准的数据类型没有在给定的存储器使用趋势相关的组中。可以在存储器112中将组216例如表示为指针、索引、句柄或者其它趋势214标识符的列表或者阵列。

一些实施例使用326分组308结果作为用于进一步动作的基础。例如,一些实施例基于分组308结果来重新启动328已经丢失太多存储器的进程120或者有丢失太多存储器的趋势的进程。一些实施例显示310关于数据类型分组的存储器使用分析信息218。显示310这一动作可以配置显示设备134(比如屏幕或者监视器),但是“显示”也涵盖向日志文件erudite、向打印机传输或者跨网络连接朝着另一设备102传输。一些实施例显示310在向用户104标识为具有最多存储器泄漏的组216中的数据类型124的数据类型名称222。具体而言,一些实施例显示310在向用户104标识为具有各种用户定义的数据类型124的最多存储器泄漏的组216中的数据类型124的数据类型名称222。一些实施例显示310用于特定数据类型的估计的泄漏大小226(即,估计的泄漏存储器数量)作为该数据类型的项目126。一些实施例显示310用于特定数据类型124的每单位时间的存储器大小的估计的泄漏速率224。一些实施例显示310用于特定数据类型124的估计的泄漏项目计数228。一些实施例显示310用于特定数据类型的每单位时间的项目126计数的估计的泄漏速率224。一些实施例显示310前述示例的组合。

在一些实施例中,预定趋势相关性标准212在并且仅在趋势214具有超出预定相关性阈值232的相关性系数230时指定它们相关。在其它实施例中,趋势相关性标准212在趋势214具有超出预定阈值232的相关性协方差234时指定它们相关。在一些实施例中,趋势相关性标准212指定阈值满足条件的布尔组合,例如,具有大于X的Pearson乘积-瞬间相关性系数和大于Y的Spearman秩相关性系数二者,其中0<X,Y<1。

在一些实施例中,用于数据类型124的使用统计量204包括以下各项中的至少一项:指示数据类型的多少项目126被分配的计数238;指示数据类型的多少项目126被取消分配的计数238;指示多少存储器112被指明为被分配给数据类型的项目126的存储器大小236;指示多少被指明为被分配给数据类型的项目126的存储器112被取消分配的存储器大小236。存储器112例如由存储器管理器、垃圾收集器、堆测量数据结构、工具仪表化和/或其它熟悉的机制指明为分配或者取消分配。

在一些实施例中,计算地标识304相应的存储器使用趋势214例如包括以下各项中的至少一项:使用最小平方来执行313简单线性回归以将使用统计量204拟合到线性趋势214,执行312分段回归以将使用统计量204拟合到逐段线性趋势214,或者执行312非线性回归以将使用统计量204拟合到非线性趋势214。为了帮助实现这些计算,例如可以在根据这里的教导而设计的程序工作流中使用熟悉的统计计算库。在一些实施例中,计算地标识相应的存储器使用趋势包括将用于使用统计量涉及的程序120的处理负荷的使用统计量214归一化318。

在一些实施例中,计算地搜索在数据类型存储器使用趋势之间的相关性包括以下各项中的至少一项:确定314用于数据类型存储器使用趋势214的Pearson乘积-瞬间相关性系数,确定314用于数据类型存储器使用趋势214的Pearson秩相关性系数,确定314用于数据类型存储器使用趋势214的Kendall秩相关性系数,确定314用于数据类型存储器使用趋势214的距离相关性,确定316用于数据类型存储器使用趋势214的距离协方差或者确定316用于数据类型存储器使用趋势214的Brownian距离协方差。

在一些实施例中,两个(或者更多个)数据类型可以在它们的相应趋势214具有在预定阈值以上的相关性系数时被分组成存储器使用趋势相关的组216,即使趋势具有不同增长速率。图9图示了显示320用于两个这样的趋势214的趋势图形322的一个示例。

配置的介质

一些实施例包括配置的计算机可读存储介质112。介质112可以包括盘(磁、光或者别的方式)、RAM、EEPROM或者其它ROM和/或其它可配置的存储器,包括具体为计算机可读介质(有别于仅传播的信号)。配置的存储介质可以具体地是可去除存储介质114、比如CD、DVD或者闪存。可以可去除或者不可去除和可以是非易失性或者非易失性的通用存储器可以被配置到如下实施例中,该实施例使用项目(比如存储器使用趋势214、趋势相关性标准212、如这里描述的那样操作的存储器分析工具210和趋势组(有效地也是数据类型组)216)这些项目以数据118和指令116的形式从可去除介质114和/或另一来源(比如网络连接)被读取以形成配置的介质。配置的介质112能够使计算机系统执行如这里公开的用于按照特定数据类型或者数据类型组检测和明存储器泄漏的技术过程步骤。图1至图3因此帮助图示了配置的存储介质实施例和过程实施例以及系统和过程实施例。具体而言,在图3中图示和/或这里以别的方式教导的过程步骤中的任何过程步骤可以用来帮助配置存储介质以形成配置的介质实施例。

附加示例

以下提供附加细节和设计考虑。与这里的其它示例一样,可以在一个给定的实施例中个别地和/或在组合中或者完全没有使用描述的特征。

本领域技术人员将理解,实施细节可以涉及专属代码(比如专属API和专属样本程序),并且因此无需出现在每个实施例中。本领域技术人员也将理解,在讨论细节时使用的程序标识符和一些其它术语是实现方式专属的,并且因此无需涉及每个实施例。然而,虽然未必地要求它们这里存在,但是提供这些细节,因为它们可以通过提供情境来帮助一些读者和/或可以举例说明这里讨论的计数的许多可能实现方式中的少数实现方式。Microsoft Visual程序和/或归档的一些现有的、计划的或者潜在的版本方面与这里描述的实施例中的一些实施例的方面一致或者以别的方式举例说明这些方面(微软公司的商标)。然而,将理解,Visual归档和/或实现方式选择未必地约束这样的实施例的范围,并且类似地,Visual和其它产品和/或它们的归档可以很好地包含落在这样的实施例的范围以外的特征(微软公司的商标)。也将理解提供以下讨论部分作为辅助未必是本领域技术人员的读者,因此可以包含/或省略如下细节,没有严格地要求这些细节的以下记载支持本公开内容。

在一些示例中,一种用于存储器泄漏检测的方式基于由应用120使用的对存储器堆130的轻量级采样和基于对所得存储器使用数据132的统计分析。如图4中所示,堆的轻量级采样202(被称为类型直方图402)在生产机器404上由采样代理406周期地收集。采样由数据处理器模块408核对以得到用于应用进程120及其个别类型124的存储器趋势信息214。这些趋势214由存储器分析辅助210统计地分析以断定进程120是否泄漏存储器,其中如果是则标识个别类型124中的哪些类型是泄漏类型410。辅助210也可以对于进程120整体和对于个别类型124或者类型组216二者在存储器大小236和数据项目计数238方面计算泄漏度量218,比如泄漏速率224。这样的方式通过统计地确定进程120中的哪些其它类型具有相似存储器简档(以得到有关类型)来帮助向开发者104提供关于存储器泄漏的情境的信息。在一些情况下,这一方式也可以通过将数据类型使用趋势相关324到处理负荷128请求趋势以找到哪些请求与泄漏有关来提供附加情境。在简洁、可视报告中向用户104呈现310这样的信息218,该报告帮助用户制定用于减少或者消除存储器泄漏问题的动作过程。

这一方式可以视为具有三个部分。一个部分是收集轻量级类型直方图数据。第二部分是统计分析数据以得到对设置情境有用的泄漏类型和其它信息。第三部分是向用户呈现相关结果。以下进一步讨论每个部分。

数据收集

在数据收集阶段中,在规律间隔收集存储器堆130的轻量级采样202并且做出一些处理以得到类型趋势214。在这一示例中,轻量级采样被称为“类型直方图”,因为它们包含每个类型124的基本统计量,比如项目大小和项目计数。这形成分析的基础。在图12中示出了类型直方图情境的一个示例。随时间收集和存储许多这样的类型直方图402。每个直方图具有关于堆130在收集时间208的状态的信息。注意,这一泄漏分析方式没有依赖于具体收集计数;任何提供原始使用数据132的机制可以用来收集它作为向分析的输入。

处理这一直方图数据以得到类型趋势,例如,关于具体类型的大小/计数在采样时间段内趋势如何的信息。例如,图12表格中的System.String可能具有在采样时段内的趋势,如图5中所示趋势。在数据收集之后,具有用于在堆(或者其它兴趣存储器112)上具有实例(项目126)的一些或者所有类型124的类型趋势。

注意,在图5-9中,沿着轴作为标记符而示出的具体数值对于这里呈现的教导并不重要。在这些图中示出的图形线和其它函数的相对形状可能对于呈现的目的而言颇为相同,即使使用不同数值标记符。实际上,图10和11包括样式化的图形,这些图形使用短线段作为轴标记符而不是使用数字。

与用于存储器泄漏分析的趋势214运作的一些技术效果将为本领域技术人员所清楚。趋势信息一旦它的值被理解就相对地易于计算,并且它收集起来也相对地轻量级而对监视的下层应用120有最小影响。为将这一趋势数据串行化到盘或者通过网络108发送它支付相对低的成本。由于可以捕获采样时间208和进程120的信息124、128,所以可以更易于在以后分析中连结这一数据与其它数据源。

存储器泄漏分析

在以上概括的方式的这一部分中,工具210分析类型趋势信息以找出哪些类型124泄漏并且找到向开发者提供附加情境以辅助调试的有关类型。

关于找到泄漏类型,一些工具210取得类型趋势信息、使用线性回归以标识拟合观测的采样的函数并且确定函数如何随时间改变(增长指示泄漏)。作为以下示例,图6图示了使用最小平方计算以拟合System.String的图5的观测趋势214以得到线函数作为拟合240的简单线性回归。拟合的函数240可以用作趋势214。在负荷和请求类型在采样间隔中近似地恒定时,估计的线在阈值以上的正斜率(例如在0.18或者10度以上的斜率)可以指示存在泄漏。非泄漏趋势有可能在采样间隔内略微地为正。但是在许多情况下,比在负荷和请求趋势上的斜率更大的在使用趋势上的斜率指示值得进一步调查的存储器泄漏可能性。工具210也可以计算关于泄漏的一些推断的度量。拟合240的斜率是例如根据在水平轴上的单位而以每分钟或者每采样的字节数为单位的估计的泄漏速率224。泄漏速率乘以采样时段的乘积给定泄漏的估计的大小226。拟合线的Y截距给定用于存储器使用的估计的开始状态。

对于直方图中的所有类型执行这样的分析提供用于那些类型124中的每个类型的泄漏速率224。泄漏速率可以被排序以标识最多泄漏类型并且向开发者提供用于使哪些类型优先开始具体调查的基础。可以从调查中过滤掉有接近零泄漏速率和/或负泄漏速率的类型。这一方式可以显著地缩减兴趣类型124的集合,这可以使调查开发者的工作容易得多。

本领域技术人员将认识到,最小平方仅为可以应用的一种线性回归。可以对于不同类型的趋势(例如非线性趋势214)应用其它回归。可以评估线性回归模型的组合以找到用于所分析的类型的良好或者最优拟合240。也可以用计数或者大小完成这样的分析。根据所分析的类型,其中之一或者二者可以令人感兴趣的。一些变化解释负荷128。一个实施例可以通过对于每秒的请求数归一化318(例如,将采样值除以在该时段的每秒请求数)和/或通过在UI图表322上叠加负荷信息并且因此用户104可以看见负荷并且判决表观泄漏是否为实际的(例如,可以预计有更高负荷的成比例使用大小按步进增加并且排除它作为泄漏)来解释负荷。

有关类型

在实践中,在给定的情形中的最高泄漏类型中的许多泄漏类型经常是用户的定制类型使用和引用的系统类型。例如,知道System.String是最高泄漏类型可能无助于开发者确定知道泄漏位于何处。一种用于提供关于泄漏的更多情境的方式是与最高泄漏类型124一起标识泄漏的其它有关类型。这一分组216可能向用户示出原本不会冒泡到泄漏类型的列表的最高的类型124,因为它们没有在与最高泄漏类型相同的每实例的速率或者大小泄漏。

为了实现这一点,一些实施例比较类型趋势并且寻找在它们之间的相关性。一种用于这样做的方式是例如使用Pearson-瞬间相关性系数或者Spearman秩系数以找出两个趋势如何接近地匹配并且使用相关性程度(或者缺乏相关性程度)作为用于找到有关类型124的基础。高(绝对值)相关性系数230指示高关系而低(绝对值)系数指示低或者无关系。也就是说,在从+1到-1的系数范围中,接近零的值代表低或者无关系,而更接近+1或者-1的值代表高关系(-1是完全地负相关)。图7图示了如由类型的趋势214A和214B的可视相似性确认的接近地有关的类型的一个示例。这些趋势之一是最高泄漏类型,而评估第二趋势以查看它是否和如何有关。对照而言,图8图示了无关的两个趋势214C和214D的示例。作为更多另一示例,图9图示了用于作为有关类型的两个数据类型124的趋势214C和214E,即使它们的增长速率不同。

根据这里的教导的一些示例使用这样的分析以包括用于与最高泄漏类型有关(相关)的类型的有关类型信息。因此,在用户104关注最高泄漏类型(假如System.String)时,他们也可以看见以相似方式泄漏的其它有关类型(假如定制的用户定义类型,如Employee类型)。这一相关性可以由开发者用来拼接泄漏可能在代码122中源于的地方。

一个变化将有关类型聚类在一起并且示出最高泄漏聚类(也就是组216)而不是个别类型。这允许开发者关注整个泄漏组而不是个别类型,这可以提供更有用情境。

有关请求

对于web应用120,也有时感兴趣知道泄漏与哪个或者哪些请求更接近地关联。负荷128请求412可以例如是HTTP请求、HTTPS请求或者其它web应用或者web服务器请求。这不仅向调查开发者给出更多情境,它也向他们给出用于理解被任何改变所影响的用户场景的良好起点。

一个变化收集关于在处理类型直方图之时处理的请求的信息。关于每个请求412的信息由数据处理器408变换成累积求和级数,该累计求和级数是给定的请求序列的部分求和的序列。因此,如果{x,y,z}是原有请求412序列,则累计求和级数是{x,x+y,x+y+z}。累计求和级数是递增级数。分析辅助210然后执行相似相关性分析(如以上对于趋势214描述的那样)以找出请求412中的哪些请求最接近地匹配泄漏趋势。这里的高相关性将指示泄漏与所讨论的请求关联。在泄漏趋势与请求数目之间的适度地高的相关性将指示泄漏在共享部件中,这也是有用的调试信息。

结果呈现

一些实施例以简洁的优先化的形式呈现分析结果作为信息218以首先作用于最有影响的泄漏。这一显示可以是以web报告或者在丰富客户端(比如IDE 136)中的报告的形式。图10图示了用户界面220的一个示例,该用户界面具有菜单栏1002、用于总体存储器使用的图形322和用户易于访问最高泄漏类型的总列表(包括用户类型124和系统类型124二者)以及最高泄漏用户定义类型的列表。在实际显示的这一样式化的表示中,文本和数字由点划线代表。例如在一个实际实施例中的泄漏速率将是实际值(例如,每小时83.64吉字节),并且最高泄漏类型将具有名称222(例如System.Byte[]、Free、System.String或者在讨论的情形中出现的无论任何名称(实施例不限于由系统软件或者累计求和级数库提供的类型124))。可以在数据类型的名称旁边示出每个数据类型的泄漏的数量226。类型名称的白名单和/或系统库/汇编/对象模块的列表可以用来在系统类型与用户定义的类型之间区分。

图11图示了在扩展的格式1102中示出最高泄漏类型的信息218的图10界面。在一些实施例中,扩展的格式1102包括或者标识以下各项中的一项或者多项:有关用户类型、有关系统类型。一些版本与每个有关类型的名称、估计的泄漏大小和估计的泄漏实例计数一起示出用于该类型的相关性系数。在一些版本中,扩展的信息的图形322A伴随有如下文本,该文本陈述数据类型的估计的泄漏大小、估计的泄漏实例计数、以每小时吉字节数为单位的泄漏速率和以每小时实例数为单位的泄漏速率。其它版本包括以直方图、散点图(例如有标记为对象126的平均大小的对数标度的水平轴和标记为大小增加速率的对数标度的竖轴)、饼形图和其它呈现格式的形式对信息218的图形呈现。一些版本以最大峰值和/或最相关的趋势的形式将用户首先引向最有用信息。

附加技术结果

本领域技术人员将认识到,这里描述的方式可以仅涉及到轻量级数据收集、串行化和传送,从而使得与完全存储器转储比较,对计算环境的性能的影响小或者甚至微不足道。在延长的时间段内采样也可以具有校正误差和给出更准确结果这样的结果、有别于往往离散、因此对在取得它时堆的状态敏感的存储器转储。有帮助的度量、如以每分钟兆字节数和每分钟实例(数据项目)数为单位的泄漏速率以及其它度量在许多情况下可用。这里描述的方式帮助开发者使哪些类型124优先被调查寻找存储器泄漏。为了附加诊断结果,这里描述的方式也可以与其它数据源(如传入请求或者垃圾收集连结)。这里描述的一些方式的结果提供用于来自数据类型(比如有关泄漏类型、对泄漏类型的聚类(分组))和有关请求的存储器泄漏的情境。

一些示例的附加陈述

一种用于通过辅助对具有处理负荷并且使用存储器的软件程序中的存储器泄漏的检测来改进计算机的运作的计算过程包括在与一个或者多个步骤相互的各种组合中的各种步骤。

可以被呈现的步骤是获得包括存储器使用采样的存储器使用数据,这些存储器使用采样共同地指定多个数据类型。在一些情况下,每个存储器使用采样指定在指定的采样时间用于数据类型中的至少一个数据类型的至少一个使用统计量的值。

可以被呈现的步骤是通过利用处理器处理存储器使用数据的至少部分,来针对多个数据类型而计算地标识随时间的相应的存储器使用趋势。

可以被呈现的步骤是计算地搜索在数据类型存储器使用趋势之间的相关性。

可以被呈现的步骤是计算地将数据类型分组成存储器使用趋势相关的组。在一些情况下,给定的存储器使用趋势相关的组中的所有数据类型具有满足预定趋势相关性标准的存储器使用趋势。在一些情况下,其趋势没有满足预定趋势相关性标准的数据类型不在给定的存储器使用趋势相关的组中。

可以被呈现的步骤是显示关于由分组步骤分组的数据类型的存储器使用分析信息。

在一些情况下,预定趋势相关性标准在并且仅在趋势具有超出预定相关性阈值的相关性系数时指定趋势相关。

在一些情况下,用于数据类型的使用统计量包括指示数据类型的多少项目被分配的计数。

在一些情况下,用于数据类型的使用统计量包括指示数据类型的多少项目被取消分配的计数。

在一些情况下,用于数据类型的使用统计量包括指示多少存储器被指明为被分配给数据类型的项目的存储器大小。

在一些情况下,用于数据类型的使用统计量包括指示多少被指明为被分配给数据类型的项目的存储器被取消分配的存储器大小。

在一些情况下,标识相应存储器使用趋势包括使用最小平方来执行简单线性回归以将使用统计量拟合到线性趋势。

在一些情况下,标识相应存储器使用趋势包括执行分段回归以将使用统计量拟合到逐段线性趋势。

在一些情况下,标识相应存储器使用趋势包括执行非线性回归以将使用统计量拟合到非线性趋势。

在一些情况下,计算地搜索在数据类型存储器使用趋势之间的相关性包括确定用于数据类型存储器使用趋势的Pearson乘积-瞬间相关性系数。

在一些情况下,计算地搜索在数据类型存储器使用趋势之间的相关性包括确定用于数据类型存储器使用趋势的Spearman秩相关性系数。

在一些情况下,计算地搜索在数据类型存储器使用趋势之间的相关性包括确定用于数据类型存储器使用趋势的Kendall秩相关性系数。

在一些情况下,计算地搜索在数据类型存储器使用趋势之间的相关性包括确定用于数据类型存储器使用趋势的距离相关性。

在一些情况下,计算地搜索在数据类型存储器使用趋势之间的相关性包括确定用于数据类型存储器使用趋势的距离协方差。

在一些情况下,计算地搜索在数据类型存储器使用趋势之间的相关性包括确定用于数据类型存储器使用趋势的Brownian距离协方差。Brownian距离协方差仅为距离协方差的一个示例。

在一些情况下,计算地标识相应的存储器使用趋势包括将用于处理负荷的使用统计量归一化。

在一些情况下,计算地将数据类型分组成存储器使用趋势相关的组包括对具有如下趋势的两个数据类型分组,这些趋势具有在预定阈值以上的相关性系数,即使趋势具有不同增长速率。

在一些情况下,显示关于由分组步骤分组的损类型的存储器使用分析信息包括显示在向用户被标识为具有最多存储器泄漏的组中的数据类型的数据类型名称。

在一些情况下,显示关于由分组步骤分组的损类型的存储器使用分析信息包括显示在向用户被标识为具有用户定义的数据类型的最多存储器泄漏的组中的用户定义的数据类型的数据类型名称。

在一些情况下,显示关于由分组步骤分组的损类型的存储器使用分析信息包括显示用于特定数据类型的估计的泄漏大小。

在一些情况下,显示关于由分组步骤分组的损类型的存储器使用分析信息包括显示用于特定数据类型的以每单位时间的存储器大小为单位的的估计的泄漏速率。

在一些情况下,显示关于由分组步骤分组的损类型的存储器使用分析信息包括显示用于特定数据类型的估计的泄漏项目计数。

在一些情况下,显示关于由分组步骤分组的损类型的存储器使用分析信息包括显示用于特定数据类型的以每单位时间的项目计数为单位的估计泄漏大小。

一些示例提供一种被配置有数据和指令的计算机可读存储介质,这些指令在由至少一个处理器执行时,使得处理器执行用于辅助对具有处理负荷并且使用存储器的软件中的存储器泄漏的检测的技术过程。

可以被呈现的步骤是获得包括存储器使用采样的存储器使用数据,这些存储器使用采样共同地指定多个数据类型。在一些情况下,每个存储器使用采样指定在指定的采样时间用于数据类型中的至少一个数据类型的至少一个使用统计量的值。

可以被呈现的步骤是通过利用处理器处理存储器使用数据的至少部分,来针对多个数据类型而计算地标识随时间的相应的存储器使用趋势。

可以被呈现的步骤是计算地搜索在数据类型存储器使用趋势之间的相关性。

可以被呈现的步骤是计算地将数据类型分组成存储器使用趋势相关的组,从而使得给定的存储器使用趋势相关的组中的所有数据类型具有满足预定趋势相关性标准的存储器使用趋势,预定趋势相关性标准在趋势具有超出预定相关性阈值的相关性系数时指定趋势相关。

在一些情况下,预定相关性阈值在范围从-1到+1的相关性系数标度上具有至少0.5的绝对值。

在一些情况下,用于数据类型的使用统计量包括指示数据类型的多少项目被分配的计数。

在一些情况下,用于数据类型的使用统计量包括指示多少存储器被指明为被分配给数据类型的项目的存储器大小。

在一些情况下,计算地标识相应存储器使用趋势包括执行至少一个线性回归。

在一些情况下,计算地标识相应存储器使用趋势包括归一化用于处理负荷的使用统计量。

在一些情况下,计算地搜索在数据类型存储器使用趋势之间的相关性包括以下各项中的至少一项:确定用于数据类型存储器使用趋势的Pearson乘积-瞬间相关性系数,确定用于数据类型存储器使用趋势的Spearman秩相关性系数,确定用于数据类型存储器使用趋势的Kendall秩相关性系数,或者确定用于数据类型存储器使用趋势的距离相关性。

可以被呈现的步骤是显示在向用户被标识为具有最多存储器泄漏的组中的数据类型的数据类型名称。

可以被呈现的步骤是显示在向用户被标识为具有用户定义的数据类型的最多存储器泄漏的组中的用户定义的数据类型的数据类型名称。

可以被呈现的步骤是显示用于特定数据类型的估计的泄漏大小。

可以被呈现的步骤是显示用于特定数据类型的以每单位时间的存储器大小为单位的估计泄漏速率。

可以被呈现的步骤是显示用于特定数据类型的估计的泄漏项目计数。

可以被呈现的步骤是显示用于特定数据类型的以每单位时间的项目计数为单位的估计的泄漏速率。

一种存储器分析计算机系统,可以被配置有存储器分析辅助,该存储器分析辅助用于通过辅助对具有处理负荷并且使用存储器的软件中的存储器泄漏的检测来改进存储器分析计算机系统本身在另一计算机系统运作时的运作。

存储器分析计算机系统通常地包括逻辑处理器和与逻辑处理器可操作地通信的存储器。

趋势相关性标准可以驻留在存储器中。

一种存储器分析工具可以驻留在存储器中并且可以具有指令,这些指令由处理器了执行以针对多个数据类型而标识随时间的相应的存储器使用趋势,搜索在数据类型存储器使用趋势之间的相关性,以及将数据类型分组成存储器使用趋势相关的组。在一些情况下,给定的存储器使用趋势相关的组中的所有数据类型具有满足趋势相关性标准的存储器使用趋势,并且其趋势没有满足趋势相关性标准的数据类型不在给定的存储器使用趋势相关的组中。

存储器分析计算机系统可以包括显示器。存储器分析工具可以包括软件,该软件显示以下项目中的至少两个项目:在向用户被标识为具有最多存储器泄漏的组中的数据类型的数据类型名称,在被标识为具有用户定义的数据类型的最多存储器泄漏的组中的用户定义的数据类型的数据类型名称,用于特定数据类型的估计的泄漏大小,用于特定数据类型的以每单位时间的存储器大小为单位的估计的泄漏速率,用于特定数据类型的估计的泄漏项目计数,或者用于特定数据类型的以每单位时间的项目计数为单位的估计的泄漏速率。存储器分析计算机系统可以具有显示项目中的至少三个项目的存储器分析工具。存储器分析计算机系统可以具有显示项目中的至少四个项目的存储器分析工具。

趋势相关性标准可以包括在范围从-1到+1的相关性系数标度上具有至少0.4的绝对值的相关性阈值。趋势相关性标准可以包括在范围从-1到+1的相关性系数标度上具有至少0.45的绝对值的相关性阈值。趋势相关性标准可以包括在范围从-1到+1的相关性系数标度上具有至少0.5的绝对值的相关性阈值。趋势相关性标准可以包括在从-1到+1的相关性系数标度上具有至少0.55的绝对值的相关性阈值。趋势相关性标准可以包括在范围从-1到+1的相关性系数标度上具有至少0.6的绝对值的相关性阈值。

存储器分析工具可以通过计算以下各项中的至少一项(或者在另一示例中的至少两项)来搜索在数据类型存储器使用趋势之间的相关性:用于数据类型存储器使用趋势的Pearson乘积-瞬间相关性系数、用于数据类型存储器使用趋势的Spearman秩相关性系数、用于数据类型存储器使用趋势的Kendall秩相关性系数、用于数据类型存储器使用趋势的统计地显著相关性系数、用于数据类型存储器使用趋势的距离相关性。

在一些示例中,存储器分析工具包括显示数据类型存储器使用趋势的图形的图形用户界面和软件。

结论

虽然这里将具体实施例明确地图示和描述为过程、为配置的介质或者为系统,但是将认识到,对一个类型的实施例的讨论也广义地延及其它实施例类型。例如,结合图3对过程的描述也帮助描述配置的介质并且帮助描述系统和制造品(如结合其它图讨论的系统和制造品)的技术效果和操作。并未遵循来自一个实施例的限制必然地被解读到另一实施例中。具体而言,过程未必地限于在讨论系统或者制造品(比如配置的存储器)之时呈现的数据结构和布置。

这里对某个特征X的实施例的引用和这里别处对具有某个特征Y的实施例的引用没有从本公开内容排除具有特征X和特征Y二者的实施例,除非这里明确地陈述这样的排除。所有可能的否定权利要求限制在也可以明确地去除被声明为一个实施例的部分的任何特征没有包含在另一实施例中,即使没有在这里的任何示例中给出该具体排除这一意义上在本公开内容的范围内。术语“实施例”这里仅用作与“如这里以与适用法律一致的方式应用的教导的过程、系统、制造品、配置的计算机可读介质和/或其它示例”的更方便形式。因而,一个给定的“实施例”可以包括这里公开的特征的任何组合,只要该实施例与至少一个权利要求一致。

并且在各图中示出的每个项目需要存在于每个实施例中。反言之,一个实施例可以包含没有在各图中明确地示出的项目。虽然这里在文本和附图中用具体示例举例说明一些可能性,但是实施例可以脱离这些示例。例如,示例的具体技术效果或者技术特征可以被省略、重新命名、不同地分组、重复、在硬件和/或软件中不同地实例化或者是在示例中的两个或者更多示例中出现的效果或者特征的混合。在一个位置示出的功能也可以在一些实施例中在不同位置被提供;本领域技术人员认识到,可以在给定的实现方式中以各种方式定义功能模块而未必地从被视为整体的交互模块的汇集中省略希望的技术效果。

已经用标号对各图进行了全篇引用。在与给定的标号关联的措词中、在各图中或者在文本中的任何表观不一致应当被理解为简单地拓宽由该标号引用的内容的范围。给定的标号的不同实例可以涉及不同实施例,即使使用相同标号。

如这里所用,比如“一个/一种”和“该”之类的术语包含一个或者多个指示的项目或者步骤。具体而言,在权利要求中,对项目的引用一般地意味着至少一个这样的项目存在,而对步骤的引用意味着执行步骤的至少一个实例。

标题仅为了方便;可以在其标题指示给定的主题的章节以外找到关于该主题的信息。

如提交的所有权利要求和说明书摘要是说明书的部分。

尽管已经在附图中示出并且以上描述了示例性实施例,但是本领域普通技术人员将清楚,可以做出许多修改而没有脱离在权利要求中阐述的原理和概念,并且这样的修改无需涵盖整个抽象概念。虽然用结构特征和/或过程动作特有的言语描述了主题内容,但是将理解,在所附权利要求中定义的主题内容未必地限于以上描述的具体技术特征或者动作。没有必要让在给定的定义或者示例中标识的每个装置或者方面或者技术效果在每个实施例中存在或者被使用。实际上,公开描述的具体特征以及动作和效果作为用于在实施权利要求时考虑的示例。

没有包容整个抽象想法、但是落入权利要求的含义和等效范围内的所有改变将在法律允许的完全程度上被涵盖在它们的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1