Java型web容器内存使用量检测方法及相关装置的制造方法

文档序号:10624694阅读:168来源:国知局
Java型web容器内存使用量检测方法及相关装置的制造方法
【专利摘要】本申请公开了一种Java型web容器内存使用量检测方法及相关装置,其根据web容器中用于处理请求的目标内存区的总内存值、预设采样时段内所述目标内存区处理的总请求数、采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数四个参数,即可计算得到单次请求耗费内存,且四个参数获取过程不需要对web容器及相关系统进行特殊配置,既不影响系统的正常运行,也使得计算结果更精确、更具有代表性。
【专利说明】
Java型web容器内存使用量检测方法及相关装置
技术领域
[0001]本申请涉及网络技术领域,尤其涉及一种Java型web容器内存使用量检测方法及相关装置。
【背景技术】
[0002]web容器是一种应用于服务器端的接口,其通过Java等程序设计语言构建而成。用于处理来自客户端的请求信息,生成并向客户端发送响应信息。其中,web容器处理一次请求信息所需的内存,即单次请求耗费内存,可以作为分析服务器性能及优化效果的一项重要指标,单次请求耗费内存越少,服务器的性能越好。
[0003]相关技术中,对于基于Java语言的web容器(以下简称Java型web容器),检测其单次请求耗费内存的一种常用方法为:通过修改服务器系统的源码逻辑,以分别获取被检测的Java型web容器处理请求前的内存耗费总量和处理请求后的内存耗费总量,进而计算二者的差值即得到单次请求耗费内存。另一种常用检测方法为:在保证服务器系统稳定运行的状态下,分别获取被检测的Java型web容器处理单次请求前后的内存快照,将两次内存快照进行对比即可得到内存变化量,即单次请求耗费内存。
[0004]但是,上述两种常用检测方法的实施,都需要服务器系统的配合,如修改源码逻辑、保证系统稳定运行、Java型web容器处理单次请求等检查前提,不仅会对服务器系统的正常运行产生一定的影响,还使检测到的数据具有特殊性,难以代表一般状态下的单次请求耗费内存。

【发明内容】

[0005]为克服相关技术中存在的问题,本申请提供一种Java型web容器内存使用量检测方法及相关装置。
[0006]本申请第一方面提供一种Java型web容器的内存使用量检测方法;该方法包括:
[0007]获取所述Java型web容器中用于处理请求的目标内存区的总内存值;
[0008]获取预设采样时段内所述目标内存区处理的总请求数;
[0009]获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数;
[0010]根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。
[0011]结合第一方面,在第一方面的第一种可行的实施方式中,获取所述第一回收次数和第二回收次数的步骤包括:
[0012]周期性记录所述目标存储区的回收次数;
[0013]读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数;
[0014]读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。
[0015]结合第一方面,或者第一方面的第一种可行的实施方式,在第一方面的第二种可行的实施方式中,获取预设采样时段内所述目标内存区处理的总请求数,包括:
[0016]通过文本处理工具awk扫描所述预设采样时段内所述Java型web容器的运行日志,得到所述总请求数。
[0017]本申请第二方面提供一种Java型web容器的内存使用量检测装置;该装置包括:
[0018]总内存值获取单元,用于获取所述Java型web容器中用于处理请求的目标内存区的总内存值;
[0019]总请求数获取单元,用于获取预设采样时段内所述目标内存区处理的总请求数;
[0020]回收次数获取单元,用于获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数;
[0021]计算单元,用于根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。
[0022]结合第二方面,在第二方面的第一种可行的实施方式中,所述回收次数获取单元包括:
[0023]计数模块,用于周期性记录所述目标存储区的回收次数;
[0024]读取模块,用于读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数,并读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。
[0025]结合第二方面,或者第二方面的第一种可行的实施方式,在第二方面的第二种可行的实施方式中,所述总请求数获取单元包括:
[0026]文本处理模块,用于通过文本处理工具awk扫描所述预设采样时段内所述Java型web容器的运行日志,得到所述总请求数。
[0027]本申请第三方面提供一种服务器,该服务器设置有Java型web容器;该服务器包括:
[0028]处理器;以及,用于存储处理器可执行指令的存储器;
[0029]其中,所述处理器被配置为:
[0030]获取所述Java型web容器中用于处理请求的目标内存区的总内存值;
[0031]获取预设采样时段内所述目标内存区处理的总请求数;
[0032]获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数;
[0033]根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。
[0034]结合第三方面,在第三方面的第一种可行的实施方式中,为获取所述第一回收次数和第二回收次数,所述处理器被配置为:
[0035]周期性记录所述目标存储区的回收次数;
[0036]读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数;
[0037]读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。
[0038]结合第三方面,或者第三方面的第一种可行的实施方式,在第三方面的第二种可行的实施方式中,为获取预设采样时段内所述目标内存区处理的总请求数,所述处理器被配置为:
[0039]通过文本处理工具awk扫描所述预设采样时段内所述Java型web容器的运行日志,得到所述总请求数。
[0040]由以上技术方案可知,本申请实施例根据web容器中用于处理请求的目标内存区的总内存值、预设采样时段内所述目标内存区处理的总请求数、采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数四个参数,即可计算得到单次请求耗费内存,且四个参数获取过程不需要对web容器及相关系统进行特殊配置,既不影响系统的正常运行,也使得计算结果更精确、更具有代表性。
[0041]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
【附图说明】
[0042]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
[0043]图1是本申请实施例提供的一种Java型web容器的内存使用量检测方法的流程图。
[0044]图2是本申请实施例提供的一种Java型web容器的内存使用量检测装置的框图。
[0045]图3是本申请实施例提供的另一种Java型web容器的内存使用量检测装置的框图。
[0046]图4是本申请实施例提供的一种服务器的框图。
【具体实施方式】
[0047]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
[0048]图1为本申请实施例提供的一种内存使用量检测方法的流程图,该检测方法应用于Java型web容器。如图1所示,该方法包括以下步骤。
[0049]SI 1、获取Java型web容器中用于处理请求的目标内存区的总内存值。
[0050]S12、获取预设采样时段内所述目标内存区处理的总请求数。
[0051]S13、获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数。
[0052]S14、根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。
[0053]其中,上述S11、S12和S13三个步骤的执行顺序不受步骤标号的限制,可以同时执行,也可以依照任一种先后顺序执行。
[0054]本申请利用Java型web容器的内存结构特性实现上述方法,原理简述如下。Java型web容器的内存结构包括Survivor区域和用于存放新生对象的Eden区域,该Eden区域即为上述目标内存区;web容器为新生对象申请存储空间时,首先判断Eden区域的未占用空间是否足够,如果足够,则直接将新生对象存入Eden中,如果不够,即Eden区域被占用完,贝1J对Eden区域执行一次垃圾回收(Garbage Col lect1n,GC),即将Eden区域中存储的活跃对象拷贝至Survivor区域,Eden区域清空;GC后,再次在Eden区域中为新生对象申请存储空间。即,Eden区域被占用完一次则GC—次。假设上述总请求数为N,第一回收次数为M1,第二回收次数为M2,则占用完所述目标内存区所需要的请求次数,即同时占用所述目标内存区的请求数的最大值N。的计算公式为N。= Nzi(M2-M1);进一步的,假设总内存值为B,则单次请求耗费内存B。的计算公式为:B。= B/N。= B/[Nzi(M2-M1)I
[0055]另外,上述预设采样时段可以根据实际应用情境确定,包括采样开始时刻及采样结束时刻;优选的,预设采样时段设置在web容器处理请求的高峰期,且采样结束时刻与采用开始时刻之间的间隔时长,即采样时长应尽量长,使得采样时段内web容器的主要性能均耗费在处理请求上;其中,采样时长越长,web容器接收到的请求越规律,服务器压力越均衡,计算结果越精确。
[0056]由以上技术方案可知,本申请实施例根据Java型web容器中用于处理请求的目标内存区的总内存值、预设采样时段内所述目标内存区处理的总请求数、采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数四个参数,即可计算得到单次请求耗费内存,且四个参数获取过程不需要对Java型web容器及相关系统进行特殊配置,既不影响系统的正常运行,也使得计算结果更精确、更具有代表性。
[0057]在本申请一个可行的实施例中,对于Java型web容器,可以直接调用Java语言的开发工具包(Java Development Kit,JDK)中提供Java虚拟机的内存池管理接口 java.lang.management.MemoryPooIMXBean来查询得到目标内存区(即Eden区域)的总内存值。
[0058]在本申请另一个可行的实施例中,对于Java型web容器,可以调用JDK中提供的监控指令jstat-gc pid实现对web容器的Eden区域垃圾回收状况的实时监控,即每隔预设时间统计一次GC次数,也即周期性记录目标内存区的回收次数;例如指令“jstat-gc web容器进程Pid 5000 10000”表示每5000毫秒对web容器进程的gc次数统计一次,共统计10000次。基于该监控指令,进一步从该监控指令的输出数据中读取采样开始时刻统计得到的GC次数,即所述第一回收次数,以及开始结束时刻统计得到的GC次数,即所述第二回收次数。
[0059]在本申请又一个可行的实施例中,可以调用文本处理工具awk对Java型web容器响应请求时记录的日志,从而统计得到预设采样时段内web容器处理的总请求数。其中,awk中包括beginHour、beginMin、endHour和endMin四个时间参数,依次表示采样开始时刻的小时、分钟和采样结束时刻的小时、分钟,根据预设采样时段对上述四个时间参数赋值,可以实现将采样时段精确至分钟;另外,还可以设置beginSec和endSec,表示采样开始时刻的秒数和采样结束时刻的秒数,实现将采样时段精确至秒。
[0060]需要说明的是,上述实施例阐述的获取总内存值、总请求数、第一回收次数和第二回收次数的方法,仅仅为本申请的一种可行的【具体实施方式】,本申请不局限于此。
[0061]图2为本申请实施例提供的一种应用于Java型web容器的内存使用量检测装置的结构框图。参照图2,该装置包括:总内存值获取单元110、总请求数获取单元120、回收次数获取单元130和计算单元140。
[0062]该总内存值获取单元110被配置为,获取Java型web容器中用于处理请求的目标内存区的总内存值。
[0063]该总请求数获取单元120被配置为,获取预设采样时段内所述目标内存区处理的总请求数。
[0064]该回收次数获取单元130被配置为,获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数。
[0065]该计算单元140被配置为,根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。
[0066]由以上技术方案可知,根据Java型web容器中用于处理请求的目标内存区的总内存值、预设采样时段内所述目标内存区处理的总请求数、采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数四个参数,即可计算得到单次请求耗费内存,且四个参数获取过程不需要对Java型web容器及相关系统进行特殊配置,既不影响系统的正常运行,也使得计算结果更精确、更具有代表性。
[0067]参照图3,在本申请一个可行的实施例中,回收次数获取单元130可以包括:计数模块131和读取模块132。
[0068]计数模块131,用于周期性记录所述目标存储区的回收次数;
[0069]读取模块132,用于读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数,并读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。
[0070]另外,总请求数获取单元具体可以包括:文本处理模块;该文本处理模块被配置为通过文本处理工具awk扫描所述预设采样时段内Java型web容器的运行日志,得到所述总请求数。
[0071 ] 关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0072]另外,本申请实施例还提供了一种计算机存储介质,例如可以是R0M、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等;该计算机存储介质中存储有程序,当所述存储介质中的程序由服务器的处理器执行时,使得服务器能够执行上述方法实施例中记载的应用于Java型web容器的内存使用量检测方法的部分或全部步骤。
[0073]图4是根据一示例性实施例示出的一种服务器的框图。参照图4,服务器400包括处理组件422,其进一步包括一个或多个处理器,以及由存储器432所代表的存储器资源,用于存储可由处理组件422的执行的指令,例如应用程序。存储器432中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,服务器400还设置有Java型web容器,处理组件422被配置为执行指令,以执行上述内存使用量检测方法,得到该Java型web容器的单次请求耗费内存。
[0074]装置400还可以包括一个电源组件426被配置为执行装置400的电源管理,一个有线或无线网络接口 450被配置为将装置400连接到网络,和一个输入输出(I/O)接口458。装置400可以操作基于存储在存储器432的操作系统,例如Windows ServerTM, MacOS XTM,UnixTM, LinuxTM,FreeBSDTM 或类似。
[0075]其中,本实施例中,处理组件422通过执行存储器432中的指令,可以完成如下步骤:
[0076]获取Java型web容器中用于处理请求的目标内存区的总内存值;
[0077]获取预设采样时段内所述目标内存区处理的总请求数;
[0078]获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数;
[0079]根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。
[0080]在本申请一个可行的实施例中,为获取所述第一回收次数和第二回收次数,,处理组件422可以执行如下步骤:
[0081]周期性记录所述目标存储区的回收次数;
[0082]读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数;
[0083]读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。
[0084]在本申请另一个可行的实施例中,为获取预设采样时段内所述目标内存区处理的总请求数,所述处理器被配置为:
[0085]通过文本处理工具awk扫描所述预设采样时段内Java型web容器的运行日志,得到所述总请求数。
[0086]由以上技术方案可知,本申请实施例提供的服务器可以根据其Java型web容器中用于处理请求的目标内存区的总内存值、预设采样时段内所述目标内存区处理的总请求数、采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数四个参数,即可计算得到单次请求耗费内存,且四个参数获取过程不需要对该Java型web容器及相关系统进行特殊配置,既不影响系统的正常运行,也使得计算结果更精确、更具有代表性。
[0087]本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
[0088]应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
【主权项】
1.一种Java型web容器的内存使用量检测方法,其特征在于,包括: 获取所述Java型web容器中用于处理请求的目标内存区的总内存值; 获取预设采样时段内所述目标内存区处理的总请求数; 获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数; 根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。2.根据权利要求1所述的检测方法,其特征在于,获取所述第一回收次数和第二回收次数的步骤包括: 周期性记录所述目标存储区的回收次数; 读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数; 读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。3.根据权利要求1或2所述的检测方法,其特征在于,获取预设采样时段内所述目标内存区处理的总请求数,包括: 通过文本处理工具awk扫描所述预设采样时段内所述Java型web容器的运行日志,得到所述总请求数。4.一种Java型web容器的内存使用量检测装置,其特征在于,包括: 总内存值获取单元,用于获取所述Java型web容器中用于处理请求的目标内存区的总内存值; 总请求数获取单元,用于获取预设采样时段内所述目标内存区处理的总请求数; 回收次数获取单元,用于获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数; 计算单元,用于根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。5.根据权利要求4所述的检测装置,其特征在于,所述回收次数获取单元包括: 计数模块,用于周期性记录所述目标存储区的回收次数; 读取模块,用于读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数,并读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。6.根据权利要求4或5所述的检测装置,其特征在于,所述总请求数获取单元包括: 文本处理模块,用于通过文本处理工具awk扫描所述预设采样时段内所述Java型web容器的运行日志,得到所述总请求数。7.一种服务器,其特征在于,所述服务器设置有Java型web容器;所述服务器包括: 处理器;以及,用于存储处理器可执行指令的存储器; 其中,所述处理器被配置为: 获取所述Java型web容器中用于处理请求的目标内存区的总内存值; 获取预设采样时段内所述目标内存区处理的总请求数; 获取采样开始时所述目标内存区的第一回收次数以及采样结束时所述目标内存区的第二回收次数; 根据所述总请求数、第一回收次数和第二回收次数计算同时占用所述目标内存区的请求数的最大值,并计算所述总内存值与所述最大值的比值,得到所述Java型web容器的单次请求耗费内存。8.根据权利要求7所述的服务器,其特征在于,为获取所述第一回收次数和第二回收次数,所述处理器被配置为: 周期性记录所述目标存储区的回收次数; 读取采样开始时刻所在周期对应的回收次数,得到所述第一回收次数; 读取采样结束时刻所在周期对应的回收次数,得到所述第二回收次数。9.根据权利要求7或8所述的服务器,其特征在于,为获取预设采样时段内所述目标内存区处理的总请求数,所述处理器被配置为: 通过文本处理工具awk扫描所述预设采样时段内所述Java型web容器的运行日志,得到所述总请求数。
【文档编号】G06F11/34GK105988919SQ201510093016
【公开日】2016年10月5日
【申请日】2015年3月2日
【发明人】刘飞
【申请人】阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1