一种信息处理方法以及信息处理装置的制造方法

文档序号:8457186阅读:386来源:国知局
一种信息处理方法以及信息处理装置的制造方法
【技术领域】
[0001]本发明涉及信息处理领域,尤其涉及一种信息处理方法以及信息处理装置。
【背景技术】
[0002]中间件(middleware)是一种独立的系统软件或服务程序,是处于操作系统、数据库和应用程序之间的软件,有时被视为操作系统或数据库的一部分,有时也被认为是应用程序的一部分,例如在业务运营支撑系统(Business&Operat1n Support System, BOSS)中,其处于操作系统、数据库和应用程序之间,主要承载了核心业务逻辑的运行。
[0003]随着社会的进一步发展,需求膨胀、业务浪涌导致硬件资源开销不断膨胀,JVM中间件承载的应用程序的性能问题也逐步凸现出来,诸如接口连接不及时释放、批量业务导致的大规模内存分配、第三方应用程序的缺陷甚至中间件本身的缺陷等引发了内存泄漏,给生产运营造成了很大的破坏性影响。这需要维护人员及时发现并反馈给研发修改,但周期长、效率低。
[0004]目前,为定位发生内存泄露的位置,以中间件为基于JVM(Java Virtual Machine,Java虚拟机)的中间件为例,通常通过对内存进行分析的方式来进行定位,例如转储JVM堆内存,按照内存空间消耗百分比进行对象排名,排名较靠前的对象判断为内存泄漏的中间产物,并在中间件环境中搜索和中间产物存在引用关系的程序,最终定位发生内存泄露的位置。
[0005]但在生产环境下,也即与中间件相连的系统以及应用处于运行状态时,现有的堆内存分析方式具有较大的侵入性,转储堆内存的方式会让Java进程处于假死状态,业务响应停滞;也可以启动Java进程的调试模式,使用外部代理程序对堆内存进行调试,窥探堆内存中内存对象的回收情况,这种方式在生产环境运行下调试有很大风险,如果被调试的内容处于关键路径上,会导致线程被阻塞,对外服务终止,同样会导致业务响应停滞。
[0006]因此,现有技术中存在通过堆内存分析定位发生内存泄露的位置的方式具有较大的侵入性,继而导致中间件业务响应停滞的技术问题。

【发明内容】

[0007]本发明实施例通过提供一种信息处理方法以及电子设备,用以解决现有技术中存在的通过堆内存分析定位发生内存泄露的位置的方式具有较大的侵入性,继而导致中间件业务响应停滞的技术问题。
[0008]本发明实施例提供了一种信息处理方法,包括:在中间件运行时,确定所述中间件的运行堆栈中需要被记录的运行对象;记录所述需要被记录的运行对象的运行时特征;根据所述运行时特征,确定所述需要被记录的运行对象中的发生内存泄露的运行对象对应的应用程序中的业务模块。
[0009]可选地,所述确定所述中间件的运行堆栈中需要被记录的运行对象,具体包括:通过所述运行堆栈的对象摘要列表,获得位于所述对象摘要列表中前M位的M个运行对象,其中M为大于等于2的整数,所述对象摘要列表为按照占据所述运行堆栈的存储容量从大到小的方式对运行对象排序后的列表;对所述运行堆栈执行全量垃圾搜集处理,并确定所述M个运行对象中位于所述对象摘要列表中前M位的N个运行对象,其中N为小于等于M的正整数;在所述N个运行对象在所述中间件的引用队列上的数量超过第一预设门限值时,确定所述N个运行对象为所述需要被记录的运行对象。
[0010]可选地,在所述获得位于所述对象摘要列表中前M位的M个运行对象之前,所述方法还包括:屏蔽所述对象摘要列表中的指定运行对象,以及屏蔽在所述引用队列上的数量小于第二预设门限值的运行对象,所述第二预设门限值小于所述第一预设门限值。
[0011]可选地,所述记录所述需要被记录的运行对象的运行时特征,具体为:记录所述需要被记录的运行对象初始化的第一线程堆栈信息以及销毁时的第二线程堆栈信息和/或记录所述需要被记录的运行对象建立套接字连接的目标地址和端口号;所述根据所述运行时特征,确定所述运行堆栈内的发生内存泄露的运行对象对应的业务,具体为:基于所述第一线程堆栈信息和所述第二堆栈线程堆栈信息,确定所述运行堆栈内的所述发生内存泄露的运行对象对应的所述应用程序中的业务模块;和/或基于所述建立套接字连接的目标地址和端口号,确定所述运行堆栈内的所述发生内存泄露的运行对象对应的所述应用程序中的业务模块。
[0012]可选地,在所述记录所述需要被记录的运行对象初始化的第一线程堆栈信息以及销毁时的第二线程堆栈信息和/或记录所述需要被记录的运行对象建立套接字连接的目标地址和端口号的同时,所述方法还包括:记录所述需要被记录的运行对象的实例化数量,并建立所述实例化数量与所述运行堆栈之间的对应关系。
[0013]本发明实施例另一方面还提供了一种信息处理装置,包括:第一确定单元,用于在中间件运行时,确定所述中间件的运行堆栈中需要被记录的运行对象;记录单元,用于记录所述需要被记录的运行对象的运行时特征;第二确定单元,用于根据所述运行时特征,确定所述需要被记录的运行对象中的发生内存泄露的运行对象对应的应用程序中的业务模块。
[0014]可选地,所述第一确定单元具体用于通过所述运行堆栈的对象摘要列表,获得位于所述对象摘要列表中前M位的M个运行对象,其中M为大于等于2的整数,所述对象摘要列表为按照占据所述运行堆栈的存储容量从大到小的方式对运行对象排序后的列表,并对所述运行堆栈执行全量垃圾搜集处理,并确定所述M个运行对象中位于所述对象摘要列表中前M位的N个运行对象,其中N为小于等于M的正整数,并在所述N个运行对象在所述中间件的引用队列上的数量超过第一预设门限值时,确定所述N个运行对象为所述需要被记录的运行对象。
[0015]可选地,所述装置还包括屏蔽单元,用于在所述获得位于所述对象摘要列表中前M位的M个运行对象之前,屏蔽所述对象摘要列表中的指定运行对象,以及屏蔽在所述引用队列上的数量小于第二预设门限值的运行对象,所述第二预设门限值小于所述第一预设门限值。
[0016]可选地,所述记录单元具体用于记录所述需要被记录的运行对象初始化的第一线程堆栈信息以及销毁时的第二线程堆栈信息和/或记录所述需要被记录的运行对象建立套接字连接的目标地址和端口号;所述第二确定单元,具体用于基于所述第一线程堆栈信息和所述第二堆栈线程堆栈信息,确定所述运行堆栈内的所述发生内存泄露的运行对象对应的所述应用程序中的业务模块;和/或基于所述建立套接字连接的目标地址和端口号,确定所述运行堆栈内的所述发生内存泄露的运行对象对应的所述应用程序中的业务模块。
[0017]可选地,所述记录单元具体还用于记录所述需要被记录的运行对象的实例化数量,并建立所述实例化数量与所述运行堆栈之间的对应关系。
[0018]本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0019]1、由于采用了在中间件运行时,确定中间件的运行堆栈中需要被记录的运行对象,并记录需要被记录的运行对象的运行时特征,并根据运行时特征,确定需要被记录的运行对象中的发生内存泄露的运行对象对应的应用程序中的业务模块的技术方案,不会直接访问中间件的运行堆栈中的运行对象,而是记录该运行对象的运行时特征,并根据该运行时特征,确定出发生内存泄露的运行对象对应的应用程序中的业务模块,对实际业务没有侵入性,所以解决了现有技术中存在的通过堆内存分析定位发生内存泄露的位置的方式具有较大的侵入性,继而导致中间件业务响应停滞的技术问题,减小了对生产环境的侵入性,从而实现了在确定了发生内存泄露的运行对象对应的应用程序中的业务模块的同时,保证了生产环境正常运行的技术效果。
[0020]2、由于采用了通过运行堆栈的对象摘要列表,获得位于对象摘要列表中前M位的M个运行对象,并对运行堆栈执行全量垃圾搜集处理,并确定M个运行对象中位于对象摘要列表中前M位的N个运行对象,并在N个运行对象在中间件的引用队列上的数量超过第一预设门限值时,确定N个运行对象为需要被记录的运行对象的技术方案,不需要通过人为经验判断来确定发生内存泄露的对象,所以避免了现有技术中需要丰富的人为经验判断才能够确定出有发生内存泄露的对象的缺陷,提高了需要被记录的运行对象的准确性,从而降低了系统记录需要被记录的运行对象的资源消耗。
【附图说明】
[0021]图1为本发明实施例提供的信息处理方法的流程图;
[0022]图2为根据本发明实施例提供的信息处理方法,确定需要被记录的运行对象中的发生内存泄露的运行对象对应的应用程序中的业务模块的示意图;
[0023]图3为本发明实施例提供的监听器的工作流程图;
[0024]图4为本发明实施例提供的监听器记录时的示意图;
[0025]图5为本发明实施例提供的建立需要被记录的运行对象的实例化数量与运行堆找之间的对应关系的不意图;
[0026]图6A和图6B是本发明实施例对于多个运行对象处于不同的加载顺序层级的情况的部署示意图;
[0027]图7为本发明实施例提供的信息处理装置的功能模块图。
【具体实施方式】
[0028]本发明实施例通过提供一种信息处理方法以及电子设备,用以解决现有技术中存在的通过堆内存分析定位发生内存泄露的位置的方式具有较大的侵入性,继而导致中间件业务响应停滞的技术问题。
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1