基于内存队列的网站动态性能监控方法及系统技术方案

技术编号:17441976 阅读:56 留言:0更新日期:2018-03-10 14:39
本发明专利技术属于互联网技术领域,公开了一种基于内存队列的网站动态性能监控方法及系统,其在内存中创建一个定长的监控队列;针对网站系统的每一个访问请求,获取监控指标数据,并封装成经定义的数据结构对象,在监控队列中根据FIFO规则保存一定数量的数据结构对象;当请求查看监控数据时,在内存中另外申请一块与监控队列大小相等的内存空间创建计算队列,将当前监控队列中的数据对象复制到计算队列,对计算队列中的数据对象进行处理并输出处理结果。本发明专利技术动态监控系统基于被监控网站系统的服务器的内存运行,具有反应快、满足高并发需求、对原系统的影响小、系统运行不依赖额外资源等优点。

【技术实现步骤摘要】
基于内存队列的网站动态性能监控方法及系统
本专利技术属于互联网
,涉及对网站系统的监控技术,具体是指网站系统的动态性能监控系统。
技术介绍
现有的网站系统的动态性能监控系统,通常的实现方式为:采集完整的访问请求数据,并存储进数据库或者其他数据文件。在需要展示时,再从数据库或者数据文件中使用SQL方式或者IO流读写方式,获取到想要的数据,再行统计和计算。优点是:1、存入的信息量大,可以获取更多的请求相关数据,可以做更多扩展性的分析。2、数据可以持久化,保存较长的时间。3、获取数据后进行统计类计算相对简单。缺点是:1、数据存储入数据库或者数据文件需要额外依赖(数据库或者数据文件的依赖)。2、监控数据的读写,反应速度较慢,依赖于IO性能,无法满足高并发的需求,监控系统的运行对网站系统运行的直接构成影响。3、监控系统相对重量级,监控系统需要额外部署。4、采用先行记录完整的访问请求数据,然后在性能分析时再从中提取有价值的信息用于分析的方式,监控并记录的包含大量分析计算时不会被使用到的数据,严重浪费了存储资源。同时,监控数据中还包含虽然会被使用但使用频率极低的数据,同样占用大量存储资源。
技术实现思路
针对基于数据库或数据文件存储的网站系统动态性能监控反应慢等问题,本专利技术提出一种新的性能监控方法,基于该监控方法,监控系统即可以满足网站系统性能监控的一般需求,又不依赖数据库或者数据文件运行,反应快速,可以满足网站系统高并发需求。本专利技术提出的具体技术方案是:一种基于内存队列的网站动态性能监控方法,在内存中创建一个定长的监控队列;针对网站系统的每一个访问请求,获取监控指标数据,并封装成经定义的数据结构对象,在监控队列中根据FIFO规则保存一定数量的数据结构对象;当请求查看监控数据时,在内存中另外申请一块与监控队列大小相等的内存空间创建计算队列,将当前监控队列中的数据对象复制到计算队列,对计算队列中的数据对象进行处理并输出处理结果。该监控方法针对访问请求定义一个通用的数据结构对象,包含请求资源URI、请求参数、请求客户端IP、请求时间、请求耗费时长等。在内存维护一个有界阻塞队列,按照队列FIFO(先进先出)的规则对访问请求的数据结构对象进行存储,根据有界缓存区规则,可以保存一段时间内所有访问请求的执行情况。在请求查看时,临时申请一块内存空间,根据队列FIFO排序的逻辑计算,把有界阻塞队列的内容重新计算,最后输出报表,从中可以看到各种性能情况,包含各个请求的最频繁的操作排序,最耗时的操作排序,历史操作记录等等。本专利技术另一目的是进一步提出一种基于内存队列的网站动态性能监控系统,该监控系统包括请求触发模块、数据结构化模块、数据存储模块和输出计算模块。所述请求触发模块,用于针对每一次访问请求分别在请求开始时和请求即将结束时两次触发性能监控系统,性能监控系统在被触发时临时获取系统控制权,获取请求信息并进行监控记录。当网站系统接收一个新的HTTP请求时,一次触发性能监控系统,性能监控系统暂时获取网站系统控制权,并且记录初始触发的时间,以服务器当前时间为准,精确到毫秒。性能监控系统获取当前HTTP请求的线程THREAD,并把初始触发时间存入该线程,并向原系统移交控制权,系统继续执行。当网站系统完成一个HTTP请求时,二次触发性能监控系统,性能监控系统将暂时获取系统控制权,并且记录二次触发的时间,以服务器当前时间为准,精确到毫秒。性能监控系统将调用监控主程序,把整个访问请求的信息发送到数据结构化模块,并向原系统移交系统控制权,系统继续执行。所述数据结构化模块,用于把访问请求的信息中和性能相关的信息抽取出来,并封装成方便进行性能计算和排序的数据结构对象,包括:提取请求资源URI:获取当前HTTP请求中REQUEST域的requestURI值。判断是否携带字符串,如果携带,则去除及以后的字符串。判断是否携带字符串;JSESSIONID,如果携带,则去除;JSESSIONID及以后的字符串。余下的值做为请求资源URI。提取请求参数:获取当前HTTP请求中REQUEST域的queryString值,当queryString不为空,则对其进行URLDecoder编码,防止因为中文而出现的乱码问题。提取客户端IP:取当前HTTP请求中REQUEST域的x-forwarded-for值。如果为空,则依次尝试获取如下几个值:Proxy-Client-IP、WL-Proxy-Client-IP、HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、remoteAddr。当获取到一个正确的IP,则停止余下几个值的尝试获取,获取到的Ip做为正确的值。提取请求时间:以初始触发时间为请求时间。提取请求耗费时长:以初始触发时间和二次触发时间两者之间的差值做为请求耗费时长。所述数据结构化模块向内存申请一块空间,创建一个固定数据结构FunItem对象,把从访问请求的信息中提取的请求资源URI、请求参数、客户端IP、请求时间、请求耗费时长数据分别存入该数据对象。并将该数据对象发送给数据存储模块。所述数据存储模块用于在内存中创建并维护一个定长的监控队列,并把结构化的数据对象存储入监控队列中;当存储空间满时,数据存储模块根据队列FIFO原则,提出存入时间最早的数据对象。所述数据存储模块接收到数据结构化模块发送过来的FunItem对象后,判断是否为第一次接收数据,若是数据存储模块第一次接收数据,则在内存中申请一块空间,创建并维护一个定长的有界阻塞队列作为监控队列;所述数据存储模块调用数据存储方法,把FunItem对象存储入监控队列;所述数据存储方法首先判断队列的长度是否是否到达临界点,如果到达临界点,则根据FIFO原则去除队列头部首元素,并把FunItem对象存入队列的列尾。作为改进,为了保证监控队列(有界阻塞队列)的正常运行,防止因并发操作而造成的数据溢出,为数据存储方法加同步锁。所述输出计算模块用于根据监控到的数据计算并输出性能监控结果;当用户请求查看监控数据时,所述输出计算模块根据当前监控队列的实际数据存储大小,在内存申请一个相同大小的空间,并创建计算队列,然后把监控队列中的当前数据复制到计算队列中,然后根据计算队列进行性能计算。进一步地,所述输出计算模块由用户查看操作触发,性能计算前执行:创建方法计数器列表,列表用于存储CountItem对象,包含方法名、执行次数、最大耗时、最小耗时、平均耗时,并且设置默认排序字段为执行次数。和创建历史列表,列表用于存储FunItem对象,默认按照存入时间进行排序。所述输出计算模块进行性能计算包括如下步骤:步骤一、循环取出计算队列里的对象的步骤:根据计算队列FIFO原则,从队列首元素开始,按顺序取出FunItem对象,并循环执行第二、三步骤;步骤二、存入历史列表:把FunItem对象存入历史列表;步骤三、存入方法计数器:首先判断FunItem对象代表的方法在方法计数器内是否存在,如果FunItem对象代表的方法在方法计数器内已经存在,则取出方法计数器里的CountItem对象,对CountItem对象进行更新:执行次数累积+1,判断当前FunItem对象的耗费时间是否满足最大耗时和最小耗时的条件,如果满足本文档来自技高网...
基于内存队列的网站动态性能监控方法及系统

【技术保护点】
一种基于内存队列的网站动态性能监控方法,其特征在于,在内存中创建一个定长的监控队列;针对网站系统的每一个访问请求,获取监控指标数据,并封装成经定义的数据结构对象,在监控队列中根据FIFO规则保存一定数量的数据结构对象;当请求查看监控数据时,在内存中另外申请一块与监控队列大小相等的内存空间创建计算队列,将当前监控队列中的数据对象复制到计算队列,对计算队列中的数据对象进行处理并输出处理结果。

【技术特征摘要】
1.一种基于内存队列的网站动态性能监控方法,其特征在于,在内存中创建一个定长的监控队列;针对网站系统的每一个访问请求,获取监控指标数据,并封装成经定义的数据结构对象,在监控队列中根据FIFO规则保存一定数量的数据结构对象;当请求查看监控数据时,在内存中另外申请一块与监控队列大小相等的内存空间创建计算队列,将当前监控队列中的数据对象复制到计算队列,对计算队列中的数据对象进行处理并输出处理结果。2.一种基于内存队列的网站动态性能监控系统,其特征在于,该监控系统包括请求触发模块、数据结构化模块、数据存储模块和输出计算模块,所述请求触发模块用于针对每一次访问请求分别在请求开始时和请求即将结束时两次触发性能监控系统,性能监控系统在被触发时临时获取系统控制权,获取请求信息并进行监控记录;当网站系统接收一个新的HTTP请求时,一次触发性能监控系统,性能监控系统暂时获取网站系统控制权,并且记录初始触发的时间,然后性能监控系统获取当前HTTP请求的线程THREAD,并把初始触发时间存入该线程,并向原系统移交控制权,网站系统继续执行;当网站系统完成一个HTTP请求时,二次触发性能监控系统,性能监控系统将暂时获取系统控制权,并且记录二次触发的时间,然后性能监控系统将调用监控主程序,把整个访问请求的信息发送到数据结构化模块,并向原系统移交系统控制权,网站系统继续执行;所述数据结构化模块用于把访问请求的信息中和性能相关的信息抽取出来,并封装成方便进行性能计算和排序的数据结构对象,包括:提取请求资源URI:获取当前HTTP请求中REQUEST域的requestURI值,判断是否携带字符串,如果携带,则去除及以后的字符串,判断是否携带字符串;JSESSIONID,如果携带,则去除;JSESSIONID及以后的字符串,余下的值做为请求资源URI;提取请求参数:获取当前HTTP请求中REQUEST域的queryString值,当queryString不为空,则对其进行URLDecoder编码;提取客户端IP:取当前HTTP请求中REQUEST域的x-forwarded-for值,如果为空,则依次尝试获取如下几个值:Proxy-Client-IP、WL-Proxy-Client-IP、HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、remoteAddr,当获取到一个正确的IP,则停止余下几个值的尝试获取,获取到的Ip做为正确的值;提取请求时间:以初始触发时间为请求时间;提取请求耗费时长:以初始触发时间和二次触发时间两者之间的差值做为请求耗费时长;所述数据结构化模块向内存申请一块空间,创建一个固定数据结构FunItem对象,把从访问请求的信息中提取的请求资源URI、请求参数、客户端IP、请求时间、请求耗费时长数据分别存入该数据对象,并将该数据对象发送给数据存储模块;所述数据存储模块用于在内存中创建并维护一个定长的监控队列,并把结构化的数据对象存储入监控队列中;当存储空间满时,数据存储模块根据队列FIFO原则,提出存入时间最早的数据对象;所述数据存储模块接收到数据...

【专利技术属性】
技术研发人员:韦海强单培红尉锦龙卢会春林静王翔
申请(专利权)人:杭州天翼智慧城市科技有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1