一种进程关键数据采集方法及装置的制作方法

文档序号:6584026阅读:167来源:国知局
专利名称:一种进程关键数据采集方法及装置的制作方法
技术领域
本发明涉及为海量用户提供服务的后台服务进程技术,尤指一种后台服务进程的 进程关键数据采集方法及装置。
背景技术
后台服务进程的进程关键数据是指,形如后台服务进程的接收请求量、成功应答 量、异常失败量等关键统计数据。这些数据是衡量后台服务质量如效率、性能、稳定性等的 重要依据,也是问题排查的着手点,对于海量用户产品有着深远意义。然而,由于某些原因, 现有的数据采集方式存在缺陷,导致采集效果并不理想。通过数据采集,将后台服务进程的进程关键数据搜集起来,再结合Web展示、短信 报警等方式,业务负责人可以轻松掌握业务的运行状况。目前在数据采集方面,比较成熟的 是公司级代理(agent)上报。图1为现有后台进程关键数据采集的系统组成示意图,如图1所示,数据采集动作 分散在业务端的每台服务器上,采集到的进程关键数据上传至数据中心,然后可以结合Web 展示、短信报警等方式,通过显示系统向业务负责人显示业务的运行状况,还可以通过报警 系统对采集到的异常采集到的进程关键数据进行报警处理。每台服务器上除了后台服务进 程(这些进程为用户提供相同的服务),还会部署一个agent进程,后台服务进程与agent 进程通过读写同一块共享内存空间来实现对进程关键数据的采集。图2为后台服务进程与agent进程通过读写同一块共享内存空间来实现对进程关 键数据的采集的逻辑关系示意图,如图2所示,后台服务进程的进程关键数据会有很多种 类的统计数据,每种统计数据分别用一个唯一的类型标识(Id)来标识,如类型Id为1代表 收到的请求量、类型Id为2代表成功应答量等,也就是说,有多少种统计数据,就对应多少 个类型Id。共享内存是一块大的哈希(hash)表,以统计类型Id为索引,value字段存放具 体统计值。可用伪代码表示其算法value = Hash (id)。当后台服务进程要更新某个统计数据时,根据该数据对应的类型Id索引到相应 的数据块,然后执行更新操作;同时,agent进程每分钟遍历一次共享内存,并将所有有效 的进程关键数据上报到数据中心,然后把当前统计值清零。这样,数据中心就能搜集到业务 端每台服务器以分钟为单位的统计值。对于共享内存空间中的某一个数据块,由于后台服务进程和agent进程都会有写 操作,必然涉及到互斥问题。目前,对于互斥的最好解决方案是利用锁机制,但出于效率和 稳定性方面的考虑,后台服务进程并不希望使用锁机制。因此,目前后台服务进程和agent 进程都是直接对数据块进行读写的,没有采取任何保护措施。以对接收请求量的采集为例, 共享内存中会有一个数据块,记录到目前为止收到的请求的个数;每个后台服务进程每收 到一个新请求,都会找到该数据块,并对数据块中存储的收到的请求的个数执行加1操作; 同时,当agent进程扫描到该数据块时,上报当前值,然后清零。现有技术中,在后台服务进程与agent进程通过读写同一块共享内存空间来实现对进程关键数据的采集时,后台服务进程和agent进程都是直接对数据块进行读写的,而 没有采取任何保护措施,这样会存在以下问题(1)由于没有采取任何保护措施,如果agent代理清零和后台服务进程加1发生的 时刻很近,而调度顺序正好为agent代理读取统计值、后台服务进程读取统计值、agent代 理清零、后台服务进程将加1后的值写入内存中的数据块,那么,会导致agent代理的清零 动作失效,这样,下一分钟的统计值将会严重偏大。(2)对于相同的统计数据,所有的后台服务进程共享同一个内存块,也同样存在 ⑴中所描述的问题。(3)随着后台服务进程数的增加,冲突几率会越来越大,最终导致统计数据的可靠 性急剧下降。实验结果表明,在压力测试环境下,偏差率可达到0. 1%。

发明内容
有鉴于此,本发明的主要目的在于提供一种进程关键数据采集方法及装置,能够 避免后台服务进程和agent进程的互斥,增强进程关键数据采集的可靠性。为达到上述目的,本发明的技术方案是这样实现的一种进程关键数据采集方法,预先设置以进程标识和类型标识为进程关键数据中 不同统计数据的索引,该方法还包括后台服务进程要更新统计数据时,根据该数据对应的类型标识和进程标识索引到 相应的数据块,执行更新操作;代理进程按照预设周期遍历共享内存,将所有有效的进程关 键数据上报到数据中心,并将当前索引到的数据块的当前统计值清零。所述进程标识为pid%m,其中,m与实际可用空间有关,%为取模运算符,pid表 示进程标识。所述代理进程将当前索引到的数据块的当前统计值清零为所述代理进程在对所 述当前索引到的数据块的当前统计值连续执行两次清零。一种进程关键数据采集装置,至少包括后台服务进程处理模块、代理进程处理模 块和存储模块,其中,存储模块,位于共享内存中,用于存储进程关键数据,存储的进程关键数据以进程 标识和类型标识为索引;后台服务进程处理模块,用于在更新统计数据时,根据该数据对应的类型标识和 进程标识索引到相应的存储模块,执行更新操作;代理进程处理模块,用于按照预设周期遍历共享内存中的存储模块,将所有有效 的进程关键数据上报到数据中心,并将当前索引到的存储模块中的当前统计值清零。所述代理进程处理模块,具体用于在对所述数据块进行清零时,连续执行两次清零。所述装置设置在业务端的服务器中。从上述本发明提供的技术方案可以看出,本发明通过以进程标识和类型标识为进 程关键数据中不同统计数据的索引,减少了每个数据块的访问进程数。对于进程关键数据 的采集来讲,减小了后台服务进程与agent进程,以及后台服务进程之间发生冲突的几率, 有效避免了后台服务进程和agent进程的互斥,增强了进程关键数据采集的可靠性。


图1为现有后台进程关键数据采集的系统组成示意图;图2为现有后台服务进程与agent进程通过读写同一块共享内存空间来实现对进 程关键数据的采集的逻辑关系示意图;图3为本发明进程关键数据采集方法的实施例的流程图;图4为本发明后台服务进程与agent进程通过读写同一块共享内存空间来实现对 进程关键数据的采集的逻辑关系示意图;图5为本发明进程关键数据采集装置的实施例的组成结构示意图。
具体实施例方式图3为本发明进程关键数据采集方法的实施例的流程图,如图3所示,包括以下步 骤步骤300 预先设置以进程标识和类型标识为进程关键数据中不同统计数据的索 引。图4为本发明后台服务进程与agent进程通过读写同一块共享内存空间来实现对 进程关键数据的采集的逻辑关系示意图,如图4所示,对于同一块共享内存,由于各个进程 的进程标识(pid)是互不重复的,这样,本发明进一步将不同后台进程的同类统计数据尽 量分散到了不同的数据块中。在内存空间充足的情况下,最理想的状况是一个数据块最 多有agent进程和一个后台服务进程访问。可用伪代码表示其算法value = Hash2(Id, pid),其中,Id为类型标识,pid为后台服务进程的进程标识。本步骤中,在实际应用时,可能会存在内存空间有限的情况,针对这种情况,本步 骤中的进程标识可以使用如Pid% m(取模)的折中方式来取值,即让若干个进程标识同时 取值为pid% m并共享同一数据块(即采用pid% m和类型标识来同时标识同一数据块), 以此来控制进程数增加时导致的共享内存空间急剧增大的问题。其中,m与实际后台服务进 程数和实际可用内存空间有关。例如,假设共有η个后台服务进程,且共有χ种统计数据, 那么,理想情况下至少需要n*x个数据块;若内存空间不足,只能提供m*x个数据块(其中, m<= η),则通过pid%m的方式,可保证数据块总数不超过m*x个,数据块的取值范围为 [X,m*x],对同一种统计数据,最差情况下,所有的进程共享同一数据块,理想情况下,n/m个 进程共享同一数据块,当m足够大如m = η时,就是1个进程共享同一数据块。步骤301 当后台服务进程要更新某个统计数据时,根据该数据对应的类型标识 和进程标识索引到相应的数据块,然后执行更新操作;agent进程按照预设周期如每分钟 遍历一次共享内存,将所有有效的进程关键数据上报到数据中心,并将当前索引到的数据 块的当前统计值清零。由于本发明方法减少了每个数据块的访问进程数,从而减小了后台服务进程与 agent进程,以及后台服务进程之间发生冲突的几率,有效避免了后台服务进程和agent进 程的互斥,增强了进程关键数据采集的可靠性。进一步地,本发明方法还包括Agent进程在对数据块进行清零时,连续执行两次 清零。这样处理,大大降低了现有技术中存在的下一分钟的统计值将会严重偏大的几率。通过本发明agent进程的重复置零处理,降低了发生冲突时产生的影响,当进程数增加时,数 据的可靠性仍能得到保证。相对于现有技术实验结果,在同样压力测试环境下,偏差率仅为 0. 00000726% ο针对本发明方法,还提供一种进程关键数据采集装置,图5为本发明进程关键数 据采集装置的实施例的组成结构示意图,如图5所示,至少包括后台服务进程处理模块、代 理进程处理模块和存储模块,其中,存储模块,位于共享内存中,用于存储进程关键数据,存储的进程关键数据以进程 标识和类型标识为索引;存储模块的作用与图3中的数据块完全一致。后台服务进程处理模块,用于在更新某个统计数据时,根据该数据对应的类型标 识和进程标识索引到相应的存储模块,然后执行更新操作;代理进程处理模块,用于按照预设周期遍历一次共享内存中的存储模块,将所有 有效的进程关键数据上报到数据中心,并将当前索引到的存储模块中的当前统计值清零。代理进程处理模块具体用于,在对所述数据块进行清零时,连续执行两次清零。图5所示的装置可以设置在业务端的服务器中。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在 本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护 范围之内。
权利要求
1.一种进程关键数据采集方法,其特征在于,预先设置以进程标识和类型标识为进程 关键数据中不同统计数据的索引,该方法还包括后台服务进程要更新统计数据时,根据该数据对应的类型标识和进程标识索引到相应 的数据块,执行更新操作;代理进程按照预设周期遍历共享内存,将所有有效的进程关键数 据上报到数据中心,并将当前索引到的数据块的当前统计值清零。
2.根据权利要求1所述的进程关键数据采集方法,其特征在于,所述进程标识为pid% m,其中,m与实际可用空间有关,%为取模运算符,pid表示进程标识。
3.根据权利要求1或2所述的进程关键数据采集方法,其特征在于,所述代理进程将当 前索引到的数据块的当前统计值清零为所述代理进程在对所述当前索引到的数据块的当 前统计值连续执行两次清零。
4.一种进程关键数据采集装置,其特征在于,至少包括后台服务进程处理模块、代理进 程处理模块和存储模块,其中,存储模块,位于共享内存中,用于存储进程关键数据,存储的进程关键数据以进程标识 和类型标识为索引;后台服务进程处理模块,用于在更新统计数据时,根据该数据对应的类型标识和进程 标识索引到相应的存储模块,执行更新操作;代理进程处理模块,用于按照预设周期遍历共享内存中的存储模块,将所有有效的进 程关键数据上报到数据中心,并将当前索引到的存储模块中的当前统计值清零。
5.根据权利要求4所述的进程关键数据采集装置,其特征在于,所述代理进程处理模 块,具体用于在对所述数据块进行清零时,连续执行两次清零。
6.根据权利要求4或5所述的进程关键数据采集装置,其特征在于,所述装置设置在业 务端的服务器中。
全文摘要
本发明提供了一种进程关键数据采集方法及装置,本发明通过以进程标识和类型标识为进程关键数据中不同统计数据的索引,减少了每个数据块的访问进程数。对于进程关键数据的采集来讲,减小了后台服务进程与agent进程,以及后台服务进程之间发生冲突的几率,有效避免了后台服务进程和agent进程的互斥,增强了进程关键数据采集的可靠性。
文档编号G06F9/46GK102087612SQ20091022558
公开日2011年6月8日 申请日期2009年12月3日 优先权日2009年12月3日
发明者万单领, 田明, 舒军, 袁清, 邢玉东 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1