一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种在线业务资源泄露的风险规避方法和系统与流程

2022-03-23 06:12:08 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,具体涉及一种在线业务资源泄露的风险规避方法和系统。


背景技术:

2.随着devops的兴起,以及市场对业务上线周期的要求,业务系统的开发和测试周期越来越短;而性能压力测度和疲劳测试等传统业务系统上线前需要做的测试就往往进行缩减或省略了,业务系统需要更加快速的上线面向客户,验证商业想法,但带来的问题就是缺乏性能压测和疲劳测试的等上线前必备的测试,在生产在线环境很容易出现各种潜在风险,如系统资源泄漏,比如内存泄露和句柄泄露导致业务系统执行中出现各种风险:系统资源被消耗殆尽,导致业务系统的执行效率严重下降、执行周期越来越长,客户体验越来越差,甚至崩溃,甚至导致用户流失和巨大的经济损失。
3.资源泄漏通常是业务上线运行一段时间后才会出现,每当出现资源泄露的故障,技术团队需要通常持续通宵,等待问题时机的出现,然后根据故障现场的各种痕迹推断可能存在的风险,紧急修复资源泄露的漏洞,再上线。如果修复的问题不对,还得重复这个过程。尤其是,当技术团队的水平经验不够丰富时,很难定位故障。
4.技术人员面对此类问题在束手无措的情况下,只能通过在一段时间重启整个业务系统的方式恢复业务,导致业务系统长时间不能访问。这种手段不能够解决根本问题,并且很难保证能够精准解决问题,因为到底重启哪个服务或应用,何时重启是没有决策依据,只能根据人为经验,因此风险很高。


技术实现要素:

5.针对现有技术中存在的上述技术问题,本发明提供一种在线业务资源泄露的风险规避方法和系统,缓解或规避由于系统资源泄漏造成的业务系统执行效率下降,防止业务系统崩溃。
6.本发明公开了一种在线业务资源泄露的风险规避方法,所述方法包括:获取访问在线业务服务的网络请求;判断执行所述网络请求的资源是否泄漏;若是,估算访问服务的单次资源泄露量;根据资源总量和单次资源泄露量,获得业务的泄漏承载量;判断是否达到承载量;若达到,通过以下任一措施规避风险:重启所述服务、切换到所述服务的冗余实例、通过蓝绿发布的形式替换所述业务的服务。
7.优选的,泄漏承载量的计算方式:
[0008][0009]
其中,availablecount表示为泄漏承载量,total表示为资源总量,w资源使用率表示为资源使用率,xi表示为服务i的单次资源泄露量,n表示为资源泄漏的服务的总量。
[0010]
优选的,根据泄漏承载量估算承载时长的方法:
[0011]
availabletime=availablecout
÷
ondemandcount
[0012]
其中,ondemandcount表示为单位时间的服务访问量;availabletime表示为承载时长。
[0013]
优选的,资源泄露包括内存泄漏和/或句柄泄漏;
[0014]
判断内存泄漏的方法包括:
[0015]
获取执行所述网络请求前后的内存值;
[0016]
获取访问所述服务的多个网络请求;
[0017]
判断所述内存值是否连续增加n次,其中n为正整数;
[0018]
若是,所述发生内存泄漏。
[0019]
优选的,判断句柄泄漏的方法包括:
[0020]
获得执行所述网络请求前后的句柄数量;
[0021]
判断所述句柄数量是否连续增加k次或超过第一域值,k为正整数;
[0022]
若是,所述网络请求发生句柄泄漏。
[0023]
优选的,获得所述句柄数量方法包括:
[0024]
基于ebpf探针的方法,拦截open和close函数;
[0025]
将所拦截数据与网络请求相关联,获得句柄数据;
[0026]
根据所述句柄数据,获得打开文件的第一句柄数量和关闭文件的第二句柄数量;
[0027]
根据所述第二句柄数量和第一句柄数量,判断句柄数量是否增加。
[0028]
优选的,获取内存值的方法包括:
[0029]
基于ebpf探针的方法,拦截内存分配函数和释放函数;
[0030]
将所拦截数据与网络请求相关联,获得内存分配数据;
[0031]
根据所述内存分配数据,获得分配的内存值和释放的内存值;
[0032]
根据所述分配内存值和释放内存值,判断内存值是否增加。
[0033]
本发明还提供一种用于实现上述风险规避方法的系统,包括获取模块、泄漏分析模块、泄漏估算模块、承载估算模块和规避模块,
[0034]
所述获取模块用于获取访问在线业务服务的网络请求;
[0035]
所述泄漏分析模块用于分析执行所述网络请求的资源是否泄漏;
[0036]
若执行所述网络请求的资源泄漏,通过所述承泄漏估算模块估算访问服务的单次资源泄露量;
[0037]
承载估算模块用于根据资源总量和单次资源泄露量,获得业务的泄漏承载量;
[0038]
若达到泄露承载量,通过规避模块通过以下任一措施规避风险:
[0039]
重启所述业务的服务、切换到所述服务的冗余实例、通过蓝绿发布的形式替换所述业务的服务。
[0040]
优选的,所述系统还包括拦截模块,
[0041]
所述拦截模块用于基于ebpf探针的方法,拦截open和close函数,获得与网络请求相关联的句柄数据;还用于基于ebpf探针的方法,拦截内存分配函数和释放函数,获得与所述网络请求相关联的内存数据。
[0042]
优选的,所述泄漏分析模块用于根据所述句柄数据,获得打开文件的第一句柄数
量和关闭文件的第二句柄数量;根据所述第二句柄数量和第一句柄数量,获得句柄数量的变量化;根据句柄数量的变化量,判断是否发生句柄泄漏;
[0043]
所述泄漏分析模块还用于根据所述内存数据,获得执行所述网络请求前后的内存值;根据所述内存值,获得内存变化量;根据所述内存变化量,判断是否发生内存泄漏。
[0044]
与现有技术相比,本发明的有益效果为:通过对服务的资源泄漏量和资源总量,计算业务系统的泄露承载量,有效的对业务系统的平稳运行进行监控;在业务系统的资源消耗之前,采取精确而有效的措施规避由于资源泄露带来的风险,使业务系统具有高可用性,防止业务系统的崩溃;为技术人员发现和解决业务系统的漏洞提供数据支持。
附图说明
[0045]
图1是本发明的在线业务资源泄漏的风险规避方法流程图;
[0046]
图2是本发明的系统逻辑框图。
具体实施方式
[0047]
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0048]
下面结合附图对本发明做进一步的详细描述:
[0049]
一种在线业务资源泄露的风险规避方法,如图1所示,所述方法包括:
[0050]
步骤101:获取访问在线业务服务的网络请求。在线业务通常具有多个服务,如登录服务、商品查询服务、计价服务和支付服务等,但不限于此,网络请求使用其中一个或多个服务。
[0051]
步骤102:判断执行所述网络请求的资源是否泄漏。其中可以是内存泄漏或句柄(file descriptor,fd)泄漏,句柄也称为文件描述符。
[0052]
若是,执行步骤103:估算访问服务的单次资源泄露量。
[0053]
若否,持续监听所述服务的网络请求。
[0054]
步骤104:根据资源总量和单次资源泄露量,获得业务的泄漏承载量。
[0055]
步骤105:判断是否达到承载量。
[0056]
若达到,步骤106:通过以下任一措施规避风险:
[0057]
重启所述服务、切换到所述服务的冗余实例、通过蓝绿发布的形式替换所述业务的服务。
[0058]
若没有达到,持续监听所述服务的网络请求。
[0059]
根据分析的服务泄漏情况,利于定位泄漏的问题所在,为技术人员制定解决方案和排除漏洞提供数据基础,在此基础上,对服务或业务系统进行更新,可以通过蓝绿发布的形式替换更新的服务或业务系统。
[0060]
通过对服务的资源泄漏量和资源总量,计算业务系统的泄露承载量,有效的对业务系统的平稳运行进行监控;在业务系统的资源消耗之前,采取精确而有效的措施规避由于资源泄露带来的风险,使业务系统具有高可用性,防止业务系统的崩溃;为技术人员发现
和解决业务系统的漏洞提供数据支持。
[0061]
步骤104中,由于业务系统具有多个服务,对于存在多个服务资源泄漏的情况,可以采用以下公式计算泄漏承载量:
[0062][0063]
其中,availablecount表示为泄漏承载量,total表示为资源总量,w资源使用率表示为资源使用率,如60%-90%,xi表示为服务i的单次资源泄露量,n表示为资源泄漏的服务的总量。达到承载量时,可以依次重启所述服务。
[0064]
还可以根据承载量,估算承载时长:
[0065]
availabletime=availablecout
÷
ondemandcount
[0066]
其中,ondemandcount表示为单位时间的服务访问量;availabletime表示为承载时长。例如,从历史平均的服务访问量,估算每天的访问量,从而估算出承载的天数。在承载时间长,业务系统可以平稳运行。
[0067]
其中,判断内存泄露的方法包括:
[0068]
步骤201:获取执行所述网络请求前后的内存值。具体的,获取方法包括:,基于ebpf探针的方法,拦截内存分配函数和释放函数,例如malloc和free函数,或mmap与unmap函数;将所拦截数据与网络请求相关联,获得内存分配数据;根据所述内存分配数据,获得分配的内存值和释放的内存值,即执行所述网络请求前后的内存值。
[0069]
通过根据skb结体,将拦截数据与网络请求相关联。例如通过ebpf的方法,拦截网络请求的收包事件和发包事件,所述收包事件或发包事件中包括skb结构体的内存地址,可以根据所述skb结构体及其内存地址与内存值和句柄数据相关联。
[0070]
步骤202:获取访问所述服务的多个网络请求。
[0071]
步骤203:判断所述内存值是否连续增加n次,其中n为正整数,取值范围可以是10-20,但不限于此。具体的,根据所述分配内存值和释放内存值,判断内存值是否增加。
[0072]
若是,执行步骤204:发生内存泄漏。
[0073]
若否,网络请求没有发生内存泄漏。
[0074]
在一个具体实施例中,判断所述内存值是否连续增加n次的方法为:判断所述内存值是否增加,若增加,m 1,m表示为内存连续增加次数;若内存值没有增加,m=0;若m超过n,则连续n次的服务访问中内存值都增加,说明内存存在泄漏。
[0075]
其中,判断句柄泄露的方法包括:
[0076]
步骤301:获得执行所述网络请求前后的句柄数量。
[0077]
具体的,获得所述句柄数量方法包括:基于ebpf探针的方法,拦截open和close函数;将所拦截数据与网络请求相关联,获得句柄数据;根据所述句柄数据,获得打开文件的第一句柄数量和关闭文件的第二句柄数量,即获得执行所述网络请求前后的句柄数量。
[0078]
步骤302:判断所述句柄数量是否连续增加k次或超过第一域值。可以根据所述第二句柄数量和第一句柄数量,判断句柄数量是否增加。
[0079]
若是,执行步骤303:所述网络请求发生句柄泄漏。
[0080]
在一个具体实施例中,判断所述内存值是否连续增加k次的方法为:判断所述句柄
数量是否增加,若增加,l 1,其中l表示为句柄连续增加次数;若句柄数量没有增加,l=0;若l超过k,如超过20,则连续k次的服务访问中句柄都增加,说明句柄存在泄漏。
[0081]
本发明还提供一种用于实现上述风险规避方法的系统,如图2所示,包括获取模块1、泄漏分析模块2、泄漏估算模块3、承载估算模块4和规避模块5,
[0082]
获取模块1用于获取访问在线业务的服务的网络请求;
[0083]
泄漏分析模块2用于分析执行所述网络请求的资源是否泄漏;
[0084]
若执行所述网络请求的资源泄漏,通过泄漏估算模块3估算单次资源泄露量;
[0085]
承载估算模块4用于根据资源总量和单次资源泄露量,获得业务的泄漏承载量;
[0086]
若达到泄露承载量,通过规避模块5通过以下任一措施规避风险:
[0087]
重启所述业务的服务、切换到所述服务的冗余实例、通过蓝绿发布的形式替换所述业务的服务。
[0088]
本发明的系统还包括拦截模块6,拦截模块6用于基于ebpf探针的方法,拦截open和close函数,获得与网络请求相关联的句柄数据;还用于基于ebpf探针的方法,拦截内存分配函数和释放函数,获得与所述网络请求相关联的内存数据。
[0089]
泄漏分析模块2用于根据所述句柄数据,获得打开文件的第一句柄数量和关闭文件的第二句柄数量;根据所述第二句柄数量和第一句柄数量,获得句柄数量的变量化;根据句柄数量的变化量,判断是否发生句柄泄漏;
[0090]
所述泄漏分析模块2还用于根据所述内存数据,获得执行所述网络请求前后的内存值;根据所述内存值,获得内存变化量;根据所述内存变化量,判断是否发生内存泄漏。
[0091]
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献