定位内存泄漏的方法、服务器端、客户端和系统的制作方法

文档序号:7742157阅读:100来源:国知局
专利名称:定位内存泄漏的方法、服务器端、客户端和系统的制作方法
技术领域
本发明涉及网络技术领域,特别涉及一种定位内存泄漏的方法、服务器端、客户端 和系统。
背景技术
当应用程序在运行的过程中发生问题时,JVM(Java Virtual Machine, Java虚拟 机)能够记录下问题发生时系统的运行状态,并将其存储在heap dump文件即转储文件中, 以便于开发者、程序员查看和调试,为分析和诊断问题提供了重要的依据。heap dump文件 中记载的运行状态通常包括系统内存中的数据,以及对象之间的引用关系等。应用程序在 运行过程中发生的问题通常为内存泄漏问题。利用专用的工具对heap dump文件进行分析, 能够定位到内存泄漏源处的对象,以及对象之间的引用关系,并展示给用户。现有技术中,通常利用基于⑶I (Graphical User hterface,图形用户界面)的分 析工具来对heap dump文件进行分析,并将反映对象之间引用关系的树形结构展示给用户, 用户在该树形结构中查看泄漏源。但是上述技术依赖于专用的工具,需要在服务器端使用专用的工具,才能完成内 存泄漏源的定位及展示,且定位及展示均是在服务器端本地完成的。当需要在远程的客户 端展示内存泄漏源的定位结果时,该技术目前还无法实现。

发明内容
为了解决现有技术的问题,本发明实施例提供了一种定位内存泄漏的方法、服务 器端、客户端和系统。所述技术方案如下一种定位内存泄漏的方法,所述方法包括对转储文件进行分析得到内存泄漏信息,所述内存泄漏信息包括内存泄漏源对应 的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终止对象为所 述第一对象;接收客户端在浏览器和服务器B/S模式下发来的定位内存泄漏的请求;将所述第一对象的信息和引用关系的信息发送给所述客户端,使得所述客户端根 据收到的信息获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。将所述第一对象的信息和引用关系的信息发送给所述客户端,具体包括在所述内存泄漏信息中,从所述引用关系的起始对象开始,按照引用的顺序依次 读取并发送所述引用关系中每个对象的信息给所述客户端,直到所述第一对象的信息发送 完成为止。所述方法还包括在所述引用关系中的每个对象的开始读取时刻,设置状态标识为读取状态,使得 在读取状态下不再响应所述客户端的其它请求;在所述引用关系中的每个对象的结束读取时刻,设置所述状态标识为非读取状态,使得在非读取状态下能够响应所述客户端的其它请求。一种定位内存泄漏的方法,所述方法包括在浏览器和服务器B/S模式下向服务器端发送定位内存泄漏的请求;接收所述服务器端返回的内存泄漏信息,所述内存泄漏信息包括内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终止对象为所述第一对象,且所述内存泄漏信息为所述服务器端对转储文件进行分析后得到的;根据接收到的所述第一对象的信息和所述引用关系的信息,获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。所述根据接收到的所述第一对象的信息和所述引用关系的信息,获取到所述第一对象和引用关系,并展示所述第一对象和引用关系,具体包括根据接收到的所述第一对象的信息和所述引用关系的信息,获取到所述第一对象和引用关系,根据所述第一对象和引用关系生成树形结构,并展示所述树形结构。一种定位内存泄漏的服务器端,所述服务器端包括分析模块,用于对转储文件进行分析得到内存泄漏信息,所述内存泄漏信息包括内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终止对象为所述第一对象;接收模块,用于接收客户端在浏览器和服务器B/S模式下发来的定位内存泄漏的请求;发送模块,用于在所述接收模块收到所述请求后,将所述分析模块得到的所述第一对象的信息和引用关系的信息发送给所述客户端,使得所述客户端根据收到的信息获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。所述发送模块具体包括发送单元,用于在所述接收模块收到所述请求后,在所述分析模块得到的所述内存泄漏信息中,从所述引用关系的起始对象开始,按照引用的顺序依次读取并发送所述引用关系中每个对象的信息给所述客户端,直到所述第一对象的信息发送完成为止,使得所述客户端根据收到的信息获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。所述发送模块还包括标识单元,用于在所述引用关系中的每个对象的开始读取时刻,设置状态标识为读取状态,使得所述服务器端在读取状态下不再响应所述客户端的其它请求,并且在所述引用关系中的每个对象的结束读取时刻,设置所述状态标识为非读取状态,使得所述服务器端在非读取状态下能够响应所述客户端的其它请求。一种定位内存泄漏的客户端,所述客户端包括发送模块,用于在浏览器和服务器B/S模式下向服务器端发送定位内存泄漏的请求;接收模块,用于接收所述服务器端返回的内存泄漏信息,所述内存泄漏信息包括内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终止对象为所述第一对象,且所述内存泄漏信息为所述服务器端对转储文件进行分析后得到的;
处理模块,用于根据所述接收模块接收到的所述第一对象的信息和所述引用关系 的信息,获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。所述处理模块具体包括处理单元,用于根据所述接收模块接收到的所述第一对象的信息和所述引用关系 的信息,获取到所述第一对象和引用关系,根据所述第一对象和引用关系生成树形结构,并 展示所述树形结构。一种定位内存泄漏的系统,所述系统包括服务器端和客户端;所述服务器端,用于对转储文件进行分析得到内存泄漏信息,所述内存泄漏信息 包括内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用 关系的终止对象为所述第一对象;接收所述客户端在浏览器和服务器B/S模式下发来的定 位内存泄漏的请求;将所述第一对象的信息和引用关系的信息发送给所述客户端;所述客户端,用于在B/S模式下向所述服务器端发送定位内存泄漏的请求;接收 所述服务器端返回的所述内存泄漏信息,根据其中的所述第一对象的信息和所述引用关系 的信息,获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。本发明实施例提供的技术方案通过服务器端对转储文件进行分析得到内存泄漏 信息,并当客户端在B/S模式下发来请求时发送分析结果给客户端,达到了远程定位内存 泄漏的目的,实现了使用web (环球网)方式定位及展示内存泄漏结果。该方法无需客户端 使用专用的工具,使用B/S方式查看内存泄漏结果,不用依赖本地环境,简单方便,容易操 作。而且,内存泄漏分析的结果不用分层次逐步显示而是一次性显示在客户端,无需客户端 的用户过多地参与,在用户可接受的响应时间内能够快速定位到泄漏源,远程查看定位泄 漏源变得很容易,能够达到远程快速定位内存泄漏的效果,极大地提高了定位的速度和效 率。


图1是本发明实施例1提供的定位内存泄漏的方法流程图;图2是本发明实施例2提供的定位内存泄漏的方法流程图;图3是本发明实施例3提供的定位内存泄漏的方法流程图;图4是本发明实施例4提供的定位内存泄漏的服务器端结构图;图5是本发明实施例5提供的定位内存泄漏的客户端结构图;图6是本发明实施例6提供的定位内存泄漏的系统结构图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。实施例1为了实现远程定位内存泄漏,参见图1,本实施例提供了一种定位内存泄漏的方 法,包括101 对heap dump转储文件进行分析得到内存泄漏信息,该内存泄漏信息包括内 存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,该引用关系的终止对象为第一对象;本实施例中,内存泄漏源是指在程序运行过程中直接发生内存泄漏的地方。该程 序中通常包括多个对象,该多个对象中通常存在多种引用关系。程序运行时可能发生一处 内存泄漏,也可能会发生多处内存泄漏,每个内存泄漏源都会对应一个对象。当发生多处内 存泄漏时,对heap dump文件进行分析会得到多个内存泄漏源各自对应的对象。对于程序 中的任一个对象来说,都可以具有一条或多条引用关系,当一个对象成为内存泄漏源时,不 仅需要定位该对象,还需要确定是由于该对象的哪条引用关系引起内存泄漏的。一个程序 的所有引用关系中,都具有一个相同的起始对象,每一条引用关系都是由该起始对象开始, 经过不同的路径引用到该条引用关系的终止对象为止。第一对象的信息通常是指第一对象的名称,当然也可以是能够代表第一对象的任 何信息,本发明实施例对此不做具体限定。引用关系的信息通常包括起始对象的信息、终 止对象的信息、以及中间对象的信息,还有从起始对象开始经过中间对象至终止对象的引 用顺序,该中间对象可以有也可以没有。其中,引用关系中的各个对象的信息可以是能够代 表该对象的任何信息,本发明实施例对此不做具体限定。102 接收客户端在B/S (Browser/Server,浏览器和服务器)模式下发来的定位内 存泄漏的请求;103 将得到的第一对象的信息和引用关系的信息发送给客户端,使得客户端根据 收到的信息获取到第一对象和引用关系,并展示第一对象和引用关系。本实施例提供的方法通常在服务器端实现,该服务器端可以利用现有的算法对 heap dump文件进行分析得到内存泄漏信息,本发明实施例对所述采用的算法不做具体限定。本发明任一实施例中,除非特别声明,均是按照出现一处内存泄漏源的情况进行 说明的,当应用场景为出现多处内存泄漏源的情况时,其定位过程仅仅是一处内存泄漏源 的定位过程的简单重复,因此,本发明实施例对多处内存泄漏源的情况不做过多说明。上述方法通过对转储文件进行分析,并当客户端在B/S模式下发来请求时发送分 析结果给客户端,达到了远程定位内存泄漏的目的,实现了使用web方式定位及展示内存 泄漏结果。该方法无需客户端使用专用的工具,由客户端使用B/S方式查看内存泄漏结果, 不用依赖本地环境,简单方便,容易操作。而且,内存泄漏分析的结果不用分层次逐步显示 而是一次性显示在客户端,与现有的分层次显示且结合用户逐步点击才能完整显示相比, 无需客户端的用户过多地参与,在用户可接受的响应时间内能够快速定位到泄漏源,远程 查看定位泄漏源变得很容易,能够达到远程快速定位内存泄漏的效果,极大地提高了定位 的速度和效率。实施例2为了实现远程定位内存泄漏,参见图2,本实施例提供了一种定位内存泄漏的方 法,包括201 在B/S模式下向服务器端发送定位内存泄漏的请求;202:接收服务器端返回的内存泄漏信息,该内存泄漏信息包括内存泄漏源对应的 第一对象的信息,以及引起内存泄漏的引用关系的信息,该引用关系的终止对象为第一对 象,且该内存泄漏信息为服务器端对heap dump转储文件进行分析后得到的;
203:根据接收到的第一对象的信息和引用关系的信息,获取到第一对象和引用关 系,并展示第一对象和引用关系。本实施例提供的方法通常在客户端实现,该客户端采用B/S模式与服务器端进行 交互,实现了基于web方式的远程定位,客户端的操作具体地可以由客户端内安装的浏览 器来实现,该浏览器可以为现有的任何一种浏览器,本发明实施例对此不做具体限定。上述方法通过在B/S模式下向服务器端发送请求,并接收服务器端根据对转储文 件进行分析得到的结果发来的内存泄漏信息,获取到内存泄漏源对应的第一对象和引起内 存泄漏的引用关系,达到了远程定位内存泄漏的目的,实现了使用web方式定位及展示内 存泄漏结果。该方法无需使用专用的工具,使用B/S方式查看内存泄漏结果,不用依赖本地 环境,简单方便,容易操作。而且,内存泄漏分析的结果不用分层次逐步显示而是一次性显 示出来的,无需用户过多地参与,在用户可接受的响应时间内能够快速定位到泄漏源,远程 查看定位泄漏源变得很容易,能够达到远程快速定位内存泄漏的效果,极大地提高了定位 的速度和效率。实施例3为了实现远程定位内存泄漏,以及防止由于多次请求带来的内存泄漏信息紊乱, 参见图3,本实施例提供了一种定位内存泄漏的方法,包括301 服务器端对heap dump转储文件进行分析得到内存泄漏信息,该内存泄漏信 息包括内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,该引用 关系的终止对象为第一对象;302 客户端在B/S模式下向服务器端发送定位内存泄漏的请求;本实施例中,服务器端和客户端基于web方式进行交互,客户端通过现有的浏览 器来向服务器端发送请求,并由浏览器接收服务器端返回的信息,然后显示给用户。具体 地,可以米用 AJAX (Asynchronous JavaScript and Extensible Markup Language,异步 Java描述语言和可扩展标记语言)来实现,本发明实施例对此不做具体限定。303:服务器端收到该请求后,从得到的引用关系中的起始对象开始,按照引用的 顺序依次读取并发送引用关系中每个对象的信息给客户端,直到第一对象的信息发送完成 为止;服务器端分析得到的引用关系中至少包括两个对象起始对象和终止对象,该终 止对象即第一对象。当获得一条引用关系时,该引用关系内的对象引用顺序也已获知,包括 起始对象、终止对象以及中间经过的每一个对象。具体地,可以循环地执行读取和发送的操 作,把引用关系中的所有对象依次发送给客户端。例如,引用关系为对象A引用对象B,对象B引用对象C,可以表示为A- > B- > C, 其中,对象A为起始对象,对象C为第一对象,即内存泄漏源,对象B为中间对象。按照引用 顺序,先读取对象A的信息,然后发送给客户端,再读取对象B的信息,然后发送给客户端, 最后读取对象C的信息,然后发送给客户端。本实施例中,任何一个对象既可以被其它对象引用,也可以引用其它对象,而且, 可以被多个对象引用,也可以引用多个对象,本发明实施例对此不做具体限定。当内存泄漏 源被多个对象引用时,则具有多条路径到达该内存泄漏源,因此,本发明实施例需要定位出 具体是由哪条路径代表的引用关系造成了内存泄漏,而其它路径则不在本发明描述的范围
8内。例如,内存泄漏源为对象C,对象C有两条引用关系,A- > B- > C和A- > D- > E- > C,其中,A- > B- > C为引起内存泄漏的引用关系,则定位出该引用关系即可,而另外 一条引用关系A- > D- > E- > C,则无需进行定位。在303中,进一步地,还可以设置状态标识,用来标识当前是否处于读取状态,且 服务器端根据该状态来决定是否对客户端的请求进行响应,以防止由于多次请求带来的内 存泄漏信息紊乱,具体如下在上述引用关系中的每个对象的开始读取时刻,服务器端设置状态标识为读取状 态,使得在读取状态下不再响应客户端的其它请求;在上述引用关系中的每个对象的结束 读取时刻,服务器端设置读取标识为非读取状态,使得在非读取状态下能够响应客户端的 其它请求,从而保证服务器端不会在一个对象的读取还未完成时,又由于其它请求而开始 读取新的对象,避免了造成数据读取紊乱。304:客户端收到服务器端发来的第一对象的信息和引用关系的信息后,根据该第 一对象的信息和引用关系的信息,获取到第一对象和引用关系,并展示第一对象和引用关 系。本实施例中,服务器端对heap dump转储文件进行分析时,不仅可以得到引起内存 泄漏的引用关系,还可以得到与内存泄漏无关的其它引用关系,也可以得到应用程序中所 有对象的引用关系。在得到与内存泄漏无关的其它引用关系的情况下,还可以根据客户端 的需要,将其它引用关系也发送给客户端进行展示。例如,服务器端对heap dump文件进行 分析后得到多种引用关系,其中,包括引起内存泄漏的引用关系A- > B- > C,以及与内存 泄漏无关的其它引用关系C- > D- > E,C- > F- > 6和B- > H- > I等等,服务器端在发 送A- > B- > C的信息给客户端时,进一步地,还可以根据客户端的请求,将其它引用关系 C- > D- > E,C- > F- > G和B- > H- > I也发送给客户端进行展示,以方便客户端的用 户查看。本实施例中,服务器端发来的第一对象的信息和引用关系的信息,可以以多种形 式实现,如以文本的方式、图示的方式、脚本的方式等等,本发明实施例对此不做具体限定。 优选地,服务器端将第一对象的信息和引用关系的信息以脚本的方式发送到客户端,客户 端收到后,由客户端的浏览器执行该脚本得到第一对象的信息和引用关系的信息,并在浏 览器中显示给用户。为了在客户端达到更直观、方便用户查看的效果,通常客户端以树形结构的形式 对内存泄漏的结果进行展示。具体地,客户端会根据得到的第一对象和引用关系生成树形 结构,并将该树形结构展示给用户。其中,树形结构的根节点为该引用关系中的起始对象, 树形结构最下端的叶子节点为内存泄漏源对应的第一对象,由根节点至该叶子节点的路径 即代表了上述引用关系,正是由于该引用关系才导致内存泄漏的,因此,通过树形结构用户 可以很方便地查看内存泄漏的定位结果。对于本发明实施例提供的技术方案,不仅包括本实施例,还包括其它所有实施例, 服务器端分析得到的第一对象的信息,不局限于该第一对象的基本信息,如名称、地址等能 够标识该对象的信息,进一步地,还可以包括其它与第一对象有关的信息,如该第一对象被 引用的时间、被引用的次数、以及在第几次被引用时造成内存泄漏等等。服务器端分析得到的引用关系的信息,不局限于该引用关系中包含的对象的基本信息、引用顺序等可以标识 该引用关系的信息,进一步地,还可以包括其中每个对象的相关信息等等。本发明实施例对 此不做具体限定。本实施例提供的上述方法通过服务器端对转储文件进行分析得到内存泄漏信息, 并当客户端在B/S模式下发来请求时发送分析结果给客户端,达到了远程定位内存泄漏的 目的,实现了使用web方式定位及展示内存泄漏结果。该方法无需客户端使用专用的工具, 客户端使用B/S方式查看内存泄漏结果,不用依赖本地环境,简单方便,容易操作。而且,内 存泄漏分析的结果不用分层次逐步显示而是一次性显示在客户端,无需客户端的用户过多 地参与,在用户可接受的响应时间内能够快速定位到泄漏源,远程查看定位泄漏源变得很 容易,能够达到远程快速定位内存泄漏的效果,极大地提高了定位的速度和效率。通过设置 状态标识来标识服务器端当前是否处于读取状态,使得服务器端在读取状态时拒绝客户端 的其它请求,以防止由于客户端多次请求而带来的内存泄漏信息紊乱的情况发生。实施例4为了实现远程定位内存泄漏,参见图4,本实施例提供了 一种定位内存泄漏的服务 器端,包括分析模块401,用于对转储文件进行分析得到内存泄漏信息,该内存泄漏信息包括 内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,该引用关系的 终止对象为第一对象;接收模块402,用于接收客户端在B/S模式下发来的定位内存泄漏的请求;发送模块403,用于在接收模块402收到请求后,将分析模块401得到的第一对象 的信息和引用关系的信息发送给客户端,使得客户端根据收到的信息获取到第一对象和引 用关系,并展示第一对象和引用关系。其中,发送模块403可以包括发送单元,用于在接收模402块收到请求后,在分析模块401得到的内存泄漏信息 中,从引用关系的起始对象开始,按照引用的顺序依次读取并发送引用关系中每个对象的 信息给客户端,直到第一对象的信息发送完成为止,使得客户端根据收到的信息获取到第 一对象和引用关系,并展示第一对象和引用关系。为了防止由于多次请求带来的内存泄漏信息紊乱,在发送模块403包括上述发送 单元的基础上,进一步地,发送模块403还可以包括标识单元,用于在引用关系中的每个对象的开始读取时刻,设置状态标识为读取 状态,使得服务器端在读取状态下不再响应客户端的其它请求,并且在引用关系中的每个 对象的结束读取时刻,设置状态标识为非读取状态,使得服务器端在非读取状态下能够响 应客户端的其它请求。本实施例提供的服务器端,与方法实施例属于同一构思,其具体实现过程详见方 法实施例,这里不再赘述。上述服务器端通过对转储文件进行分析,并当客户端在B/S模式下发来请求时发 送分析结果给客户端,达到了远程定位内存泄漏的目的,实现了使用web方式定位及展示 内存泄漏结果。该方法无需客户端使用专用的工具,由客户端使用B/S方式查看内存泄漏 结果,不用依赖本地环境,简单方便,容易操作。而且,内存泄漏分析的结果不用分层次逐步显示而是一次性显示在客户端,无需客户端的用户过多地参与,在用户可接受的响应时间 内能够快速定位到泄漏源,远程查看定位泄漏源变得很容易,能够达到远程快速定位内存 泄漏的效果,极大地提高了定位的速度和效率。通过设置状态标识来标识服务器端当前是 否处于读取状态,使得服务器端在读取状态时拒绝客户端的其它请求,以防止由于客户端 多次请求而带来的内存泄漏信息紊乱的情况发生。实施例5为了实现远程定位内存泄漏,参见图5,本实施例提供了 一种定位内存泄漏的客户 端,包括发送模块501,用于在B/S模式下向服务器端发送定位内存泄漏的请求;接收模块502,用于接收服务器端返回的内存泄漏信息,该内存泄漏信息包括内存 泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,该引用关系的终止 对象为第一对象,且该内存泄漏信息为服务器端对转储文件进行分析后得到的;处理模块503,用于根据接收模块502接收到的第一对象的信息和引用关系的信 息,获取到第一对象和引用关系,并展示第一对象和引用关系。为了更直观形象地展示内存泄漏的定位结果,处理模块503可以包括处理单元,用于根据接收模块502接收到的第一对象的信息和引用关系的信息, 获取到第一对象和引用关系,根据第一对象和引用关系生成树形结构,并展示该树形结构。本实施例提供的客户端,与方法实施例属于同一构思,其具体实现过程详见方法 实施例,这里不再赘述。上述客户端通过在B/S模式下向服务器端发送请求,并接收服务器端根据对转储 文件进行分析得到的结果发来的内存泄漏信息,获取到内存泄漏源对应的第一对象和引起 内存泄漏的引用关系,达到了远程定位内存泄漏的目的,实现了使用web方式定位及展示 内存泄漏结果。该方法无需客户端使用专用的工具,使用B/S方式查看内存泄漏结果,不用 依赖本地环境,简单方便,容易操作。而且,内存泄漏分析的结果不用分层次逐步显示而是 一次性显示出来的,无需用户过多地参与,在用户可接受的响应时间内能够快速定位到泄 漏源,远程查看定位泄漏源变得很容易,能够达到远程快速定位内存泄漏的效果,极大地提 高了定位的速度和效率。实施例6为了实现远程定位内存泄漏,参见图6,本实施例提供了一种定位内存泄漏的系 统,包括服务器端601和客户端602 ;服务器端601,用于对转储文件进行分析得到内存泄漏信息,该内存泄漏信息包括 内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,该引用关系的 终止对象为第一对象;接收客户端602在B/S模式下发来的定位内存泄漏的请求;将第一 对象的信息和引用关系的信息发送给客户端602 ;客户端602,用于在B/S模式下向服务器端601发送定位内存泄漏的请求;接收服 务器端601返回的内存泄漏信息,根据其中的第一对象的信息和引用关系的信息,获取到 第一对象和引用关系,并展示第一对象和引用关系。本实施例提供的系统,与方法实施例属于同一构思,其具体实现过程详见方法实 施例,而且,服务器端601与实施例4中的服务器端相同,客户端602与实施例5中描述的客户端相同,因此,这里不再赘述。本实施例提供的上述系统通过服务器端对转储文件进行分析得到内存泄漏信息, 并当客户端在B/S模式下发来请求时发送分析结果给客户端,达到了远程定位内存泄漏的 目的,实现了使用web方式定位及展示内存泄漏结果。该方法无需客户端使用专用的工具, 客户端使用B/S方式查看内存泄漏结果,不用依赖本地环境,简单方便,容易操作。而且,内 存泄漏分析的结果不用分层次逐步显示而是一次性显示在客户端,无需客户端的用户过多 地参与,在用户可接受的响应时间内能够快速定位到泄漏源,远程查看定位泄漏源变得很 容易,能够达到远程快速定位内存泄漏的效果,极大地提高了定位的速度和效率。通过设置 状态标识来标识服务器端当前是否处于读取状态,使得服务器端在读取状态时拒绝客户端 的其它定位请求,以防止由于客户端多次请求而带来的内存泄漏信息紊乱的情况发生。最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部 或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计 算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所 述的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。本发明实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单 独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用 硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能 模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介 质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。上述的各装置或系统,可以 执行相应方法实施例中的方法。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和 原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种定位内存泄漏的方法,其特征在于,所述方法包括对转储文件进行分析得到内存泄漏信息,所述内存泄漏信息包括内存泄漏源对应的第 一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终止对象为所述第 一对象;接收客户端在浏览器和服务器B/S模式下发来的定位内存泄漏的请求;将所述第一对象的信息和引用关系的信息发送给所述客户端,使得所述客户端根据收 到的信息获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。
2.根据权利要求1所述的方法,其特征在于,将所述第一对象的信息和引用关系的信 息发送给所述客户端,具体包括在所述内存泄漏信息中,从所述引用关系的起始对象开始,按照引用的顺序依次读取 并发送所述引用关系中每个对象的信息给所述客户端,直到所述第一对象的信息发送完成 为止。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括在所述引用关系中的每个对象的开始读取时刻,设置状态标识为读取状态,使得在读 取状态下不再响应所述客户端的其它请求;在所述引用关系中的每个对象的结束读取时刻,设置所述状态标识为非读取状态,使 得在非读取状态下能够响应所述客户端的其它请求。
4.一种定位内存泄漏的方法,其特征在于,所述方法包括在浏览器和服务器B/S模式下向服务器端发送定位内存泄漏的请求;接收所述服务器端返回的内存泄漏信息,所述内存泄漏信息包括内存泄漏源对应的第 一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终止对象为所述第 一对象,且所述内存泄漏信息为所述服务器端对转储文件进行分析后得到的;根据接收到的所述第一对象的信息和所述引用关系的信息,获取到所述第一对象和引 用关系,并展示所述第一对象和引用关系。
5.根据权利要求4所述的方法,其特征在于,所述根据接收到的所述第一对象的信息 和所述引用关系的信息,获取到所述第一对象和引用关系,并展示所述第一对象和引用关 系,具体包括根据接收到的所述第一对象的信息和所述引用关系的信息,获取到所述第一对象和引 用关系,根据所述第一对象和引用关系生成树形结构,并展示所述树形结构。
6.一种定位内存泄漏的服务器端,其特征在于,所述服务器端包括分析模块,用于对转储文件进行分析得到内存泄漏信息,所述内存泄漏信息包括内存 泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终 止对象为所述第一对象;接收模块,用于接收客户端在浏览器和服务器B/S模式下发来的定位内存泄漏的请求;发送模块,用于在所述接收模块收到所述请求后,将所述分析模块得到的所述第一对 象的信息和引用关系的信息发送给所述客户端,使得所述客户端根据收到的信息获取到所 述第一对象和引用关系,并展示所述第一对象和引用关系。
7.根据权利要求6所述的服务器端,其特征在于,所述发送模块具体包括发送单元,用于在所述接收模块收到所述请求后,在所述分析模块得到的所述内存泄 漏信息中,从所述引用关系的起始对象开始,按照引用的顺序依次读取并发送所述引用关 系中每个对象的信息给所述客户端,直到所述第一对象的信息发送完成为止,使得所述客 户端根据收到的信息获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。
8.根据权利要求7所述的服务器端,其特征在于,所述发送模块还包括标识单元,用于在所述引用关系中的每个对象的开始读取时刻,设置状态标识为读取 状态,使得所述服务器端在读取状态下不再响应所述客户端的其它请求,并且在所述引用 关系中的每个对象的结束读取时刻,设置所述状态标识为非读取状态,使得所述服务器端 在非读取状态下能够响应所述客户端的其它请求。
9.一种定位内存泄漏的客户端,其特征在于,所述客户端包括发送模块,用于在浏览器和服务器B/S模式下向服务器端发送定位内存泄漏的请求;接收模块,用于接收所述服务器端返回的内存泄漏信息,所述内存泄漏信息包括内存 泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系的终 止对象为所述第一对象,且所述内存泄漏信息为所述服务器端对转储文件进行分析后得到 的;处理模块,用于根据所述接收模块接收到的所述第一对象的信息和所述引用关系的信 息,获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。
10.根据权利要求9所述的客户端,其特征在于,所述处理模块具体包括处理单元,用于根据所述接收模块接收到的所述第一对象的信息和所述引用关系的信 息,获取到所述第一对象和引用关系,根据所述第一对象和引用关系生成树形结构,并展示 所述树形结构。
11.一种定位内存泄漏的系统,其特征在于,所述系统包括服务器端和客户端;所述服务器端,用于对转储文件进行分析得到内存泄漏信息,所述内存泄漏信息包括 内存泄漏源对应的第一对象的信息,以及引起内存泄漏的引用关系的信息,所述引用关系 的终止对象为所述第一对象;接收所述客户端在浏览器和服务器B/S模式下发来的定位内 存泄漏的请求;将所述第一对象的信息和引用关系的信息发送给所述客户端;所述客户端,用于在B/S模式下向所述服务器端发送定位内存泄漏的请求;接收所述 服务器端返回的所述内存泄漏信息,根据其中的所述第一对象的信息和所述引用关系的信 息,获取到所述第一对象和引用关系,并展示所述第一对象和引用关系。
全文摘要
本发明公开了一种定位内存泄漏的方法、服务器端、客户端和系统,属于网络技术领域。所述方法包括分析转储文件得到内存泄漏信息,包括内存泄漏源对应的第一对象的信息,及引起内存泄漏的引用关系的信息;接收客户端在B/S模式下发来的定位内存泄漏的请求;将第一对象的信息和引用关系的信息发送给客户端,使得客户端根据收到的信息获取到第一对象和引用关系并进行展示。所述服务器端包括分析模块、接收模块和发送模块。所述客户端包括发送模块、接收模块和处理模块。所述系统包括服务器端和客户端。本发明使用web方式实现了远程定位内存泄漏,无需客户端使用专用工具和用户过多地参与,能够达到远程快速定位内存泄漏的效果。
文档编号H04L29/08GK102148844SQ201010111619
公开日2011年8月10日 申请日期2010年2月9日 优先权日2010年2月9日
发明者周庆益 申请人:深圳市金蝶中间件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1