一种内存控制方法、装置、设备及存储介质与流程

文档序号:31620621发布日期:2022-09-23 23:08阅读:53来源:国知局
一种内存控制方法、装置、设备及存储介质与流程

1.本发明涉及计算机技术领域,特别涉及一种内存控制方法、装置、设备及存储介质。


背景技术:

2.浏览器/服务器模式(browser/server,b/s)利用不断成熟的web浏览器技术,实现原来需要专用软件才能实现的强大功能,节约开发成本。现有的海量存储管理软件基于b/s架构,实现了存储系统的界面化管理,用户能够通过界面操作实现存储的资源管理,同时现有海量存储管理软件除了在web界面进行存储系统的管理,还有后端独立的各个模块为此支撑,在存储系统长时间运行过程中偶尔会发生管理软件模块内存泄漏问题。
3.现有技术中,利用linux内核的一个功能cgroup(控制组群,control groups)进行内存控制,通过将模块划分为一个进程组,设定一个内存使用上限,一旦进程组中模块使用的内存达到上限,会将内存占用最大的进程杀死重启,但重启进程不能有效控制时间,只能重启内存最大的进程,对于内存增长过快的模块,可能还会继续导致问题存在。此外,直接重启模块进程,还可能会导致业务中断。


技术实现要素:

4.有鉴于此,本发明的目的在于提供一种内存控制方法、装置、设备及介质,能够实现内存的自动控制。其具体方案如下:
5.第一方面,本技术公开了一种内存控制方法,包括:
6.为存储系统内每个进程模块分配内存上限;
7.按照预设时间间隔周期性获取所述进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块;
8.确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限。
9.可选的,所述确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限,包括:
10.计算除所述目标进程模块外,其余所述进程模块的内存剩余量;所述内存剩余量为内存上限与实际使用内存的差值;
11.根据所述内存剩余量和筛选条件确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限;所述筛选条件为基于所述目标进程模块的实际使用内存和预设百分比确定的条件。
12.可选的,所述根据所述内存剩余量和筛选条件确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限,包括:
13.根据所述筛选条件计算筛选阈值,若存在内存剩余量大于筛选阈值的进程模块,则将该进程模块作为未完全占用进程模块;
14.按照预设下调幅度下调所述未完全占用进程模块的内存上限,以得到空闲内存,并将所述空闲内存分配给所述目标进程模块,以上调所述目标进程模块的内存上限。
15.可选的,所述根据所述内存剩余量和预设筛选条件确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限,包括:
16.根据所述筛选条件计算筛选阈值,若不存在内存剩余量大于筛选阈值的进程模块,则按照预设上调幅度直接上调所述目标进程模块的内存上限。
17.可选的,所述若不存在内存剩余量大于筛选阈值的进程模块,则按照预设上调幅度直接上调所述目标进程模块的内存上限之后,还包括:
18.根据所述目标进程模块调整后的内存上限,判断所述存储系统的内存上限总值是否大于所述存储系统的剩余内存量;
19.若是,则重启所述目标进程模块,并将所述目标进程模块的内存上限调回为最近一次的历史内存上限。
20.可选的,所述筛选出实际使用内存大于内存上限的进程模块作为目标进程模块之后,还包括:
21.将所述目标进程模块关联的目标指令集合记录到所述目标进程模块对应的异常列表中,并根据所述异常列表生成检测报告。
22.可选的,所述内存控制方法,还包括:
23.向所述存储系统添加对应的事件管理器,并通过所述事件管理器获取指令;
24.确定出与所述指令对应的所有关联进程模块,检测所述关联进程模块的运行状态;
25.若所有所述关联进程模块的运行状态均为正常,则下发所述指令;
26.否则,缓存所述指令,直至监测到所有所述关联进程模块的运行状态均为正常时下发所述指令。
27.第二方面,本技术公开了一种内存控制装置,包括:
28.内存分配模块,用于为存储系统内每个进程模块分配内存上限;
29.目标进程模块确定模块,用于按照预设时间间隔周期性获取所述进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块;
30.内存调整模块,用于确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限。
31.第三方面,本技术公开了一种电子设备,包括:
32.存储器,用于保存计算机程序;
33.处理器,用于执行所述计算机程序,以实现前述的内存控制方法。
34.第四方面,本技术公开了一种计算机可读存储介质,用于存储计算机程序;其中计算机程序被处理器执行时实现前述的内存控制方法。
35.本技术中,为存储系统内每个进程模块分配内存上限;按照预设时间间隔周期性获取所述进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块;确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限。可见,通过给每个进程模块分配内存使用上限阈值,在每个检测周期内检测各个内存的使用情况,如果出现内存使用超上限情况则进行内存上限调整,由此,通
过实时检测所有进程模块使用内存,在每个检测周期内对目标进程模块内存上限进行实时再分配,实现了内存的自动控制,同时不影响业务,最大限度的降低整个系统内存异常的概率,增强系统的鲁棒性。
附图说明
36.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
37.图1为本技术提供的一种内存控制方法流程图;
38.图2为本技术提供的一种具体的指令下发流程图;
39.图3为本技术提供的一种具体的内存控制流程图;
40.图4为本技术提供的一种内存控制装置结构示意图;
41.图5为本技术提供的一种电子设备结构图。
具体实施方式
42.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
43.现有技术中,利用linux内核的一个功能cgroup进行内存控制,通过将模块划分为一个进程组,设定一个内存使用上限,一旦进程组中模块使用的内存达到上限,会将内存占用最大的进程杀死重启,但重启进程不能有效控制时间,只能重启内存最大的进程,对于内存增长过快的模块,可能还会继续导致问题存在。为克服上述技术问题,本技术提出一种内存控制方法,能够实现内存的自动控制。
44.本技术实施例公开了一种内存控制方法,参见图1所示,该方法可以包括以下步骤:
45.步骤s11:为存储系统内每个进程模块分配内存上限。
46.本实施例中,首先为存储系统内每个进程模块分配内存上限,内存上限的分配需要符合总内存上限值不超过整个系统剩余内存的标准,具体可以根据经验为不同的进程模块分配相应的内存上限阈值。例如,给每个进程模块(a1,a2,

,an)分配内存上限(a1,a2,

,an),总内存上限值为am=a1+a2+

+an,am不超过整个系统剩余内存m。
47.本实施例中,为存储系统内每个进程模块分配内存上限之前,还可以包括:向所述存储系统添加对应的事件管理器,并通过所述事件管理器获取指令;确定出与所述指令对应的所有关联进程模块,检测所述关联进程模块的运行状态;若所有所述关联进程模块的运行状态均为正常,则下发所述指令;否则,缓存所述指令,直至监测到所有所述关联进程模块的运行状态均为正常时下发所述指令。即通过在存储系统中增加一个事件管理器,所有下发指令均通过事件管理器进行下发;事件管理器收到指令后,识别出该指令依赖的所有模块,检查所有依赖模块进程是否正常,如果正常则直接下发指令,否则,将指令存入缓
存,等待下次检测周期,直到正常以后再下发指令。由此,利用事件管理器的缓存功能,在模块正常后再下发指令,可以避免某个进程重启导致的业务中断。另外,本实施例中公开的内存控制方法也可以由上述事件管理器执行。
48.步骤s12:按照预设时间间隔周期性获取所述进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块。
49.本实施例中,系统运行后按照预设时间间隔周期性获取进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块,即根据检测周期检测进程模块的内存使用状态,以筛选出实际使用内存大于内存上限的进程模块作为目标进程模块,便于后续针对该目标进程模块进行内存上限的调整。即查询每个进程模块(a1,a2,

,an)实际使用内存(b1,b2,

,bn),筛选出目标进程模块an使用内存bn超过内存上限an。
50.本实施例中,所述筛选出实际使用内存大于内存上限的进程模块作为目标进程模块之后,还可以包括:将所述目标进程模块关联的目标指令集合记录到所述目标进程模块对应的异常列表中,并根据所述异常列表生成检测报告。即每个检测周期内通过记录各个内存异常的目标进程模块的指令集,输出异常数据报告,便于记录排查内存异常原因。
51.步骤s13:确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限。
52.本实施例中,确定出内存异常的目标进程模块后,首先确定该目标进程模块对应的内存上限调整方式,然后,根据该内存上限调整方式上调目标进程模块的内存上限,使内存恢复正常运行。
53.本实施例中,所述确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限,可以包括:计算除所述目标进程模块外,其余所述进程模块的内存剩余量;所述内存剩余量为内存上限与实际使用内存的差值;根据所述内存剩余量和筛选条件确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限;所述筛选条件为基于所述目标进程模块的实际使用内存和预设百分比确定的条件。计算其余进程模块的内存剩余量,如进程ai内存上限ai与实际内存bi的差值ci,ci=ai-bi,然后根据内存剩余量和筛选条件确定内存上限调整方式,并根据内存上限调整方式上调所述目标进程模块的内存上限,其中,筛选条件为基于目标进程模块的实际使用内存和预设百分比确定的条件。
54.本实施例中,所述根据所述内存剩余量和筛选条件确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限,可以包括:根据所述筛选条件计算筛选阈值,若存在内存剩余量大于筛选阈值的进程模块,则将该进程模块作为未完全占用进程模块;按照预设下调幅度下调所述未完全占用进程模块的内存上限,以得到空闲内存,并将所述空闲内存分配给所述目标进程模块,以上调所述目标进程模块的内存上限。如预设百分比为30%,目标进程模块an的实际使用内存为bn,则筛选阈值为bn*30%,进一步,判断是否存在进程ai实际内存bi与阈值ai差ci满足ci》=bn*30%;若存在,则根据预设下调幅度,如80%,调整ai内存上限为ai=ai*80%,同时将ai*20%分配给an,调整后an=an+ai*20%,然后进入下个检测周期。
55.本实施例中,所述根据所述内存剩余量和预设筛选条件确定内存上限调整方式,
并根据所述内存上限调整方式上调所述目标进程模块的内存上限,可以包括:根据所述筛选条件计算筛选阈值,若不存在内存剩余量大于筛选阈值的进程模块,则按照预设上调幅度直接上调所述目标进程模块的内存上限。即若不存在内存剩余量大于筛选阈值的进程模块,则照预设上调幅度,如120%,直接上调所述目标进程模块的内存上限,调整后目标进程模块的内存上限an=an*120%。即在内部进行阈值重新分配,如果无法内部分配则直接调大阈值,当出现内存不足则重启部分超阈值的目标进程模块。
56.通过实时检测各个模块的内存使用情况,合理分配各模块内存使用上限,在内存异常且影响到系统内存使用情况下重启内存异常模块,释放内存,同时依赖于事件管理器对指令集的缓存,又不影响存储正常业务。其中,上述预设百分比、预设下调幅度、预设上调幅度可以自定义,具体可以根据历史数据和集群规模进行配置。
57.本实施例中,所述若不存在内存剩余量大于筛选阈值的进程模块,则按照预设上调幅度直接上调所述目标进程模块的内存上限之后,还可以包括:根据所述目标进程模块调整后的内存上限,判断所述存储系统的内存上限总值是否大于所述存储系统的剩余内存量;若是,则重启所述目标进程模块,并将所述目标进程模块的内存上限调回为最近一次的历史内存上限。即如果调大阈值an会导致总内存am超过整个系统剩余内存m,则将该进程重启,内存阈值仍然调回到an。
58.由上可见,本实施例中为存储系统内每个进程模块分配内存上限;按照预设时间间隔周期性获取所述进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块;确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限。可见,通过给每个进程模块分配内存使用上限阈值,在每个检测周期内检测各个内存的使用情况,如果出现内存使用超上限情况则进行内存上限调整,由此,通过实时检测所有进程模块使用内存,在每个检测周期内对目标进程模块内存上限进行实时再分配,实现了内存的自动控制,同时不影响业务,最大限度的降低整个系统内存异常的概率,增强系统的鲁棒性。
59.本实施例还公开了一种具体的存储管理软件内存控制方法实现过程示意图,如图2和图3所示。具体实施过程如下:
60.(1)在存储系统中增加一个事件管理器,所有下发指令均通过事件管理器进行下发;
61.(2)事件管理器收到指令后,识别出该指令依赖的模块,检查所有依赖模块进程是否正常,如果正常则直接下发指令,否则执行步骤(3);
62.(3)将指令存入缓存,等待下次检测周期,直到正常以后再下发指令;
63.(4)给每个进程模块(a1,a2,

,an)分配内存上限(a1,a2,

,an),总内存上限值为am=a1+a2+

+an,am不超过整个系统剩余内存m;
64.(5)查询每个进程模块(a1,a2,

,an)实际使用内存(b1,b2,

,bn);
65.(6)存在模块an使用内存bn超过阈值an,则执行步骤(7),
66.(7)比较其他进程实际使用内存与内存上限,判断是否存在进程ai实际内存bi与阈值ai差ci满足ci》=bn*30%,满足条件执行步骤(8),否则执行步骤(9);
67.(8)调整ai内存上限为ai=ai*80%,同时将ai*20%分配给an(an=an+ai*20%),执行步骤(5),进入下个检测周期;
68.(9)直接调大阈值an=an*120%,执行步骤(10);
69.(10)如果调大阈值an会导致总内存am超过整个系统剩余内存m,则将该进程重启,内存阈值仍然调回到an。执行步骤(11);
70.(11)将该检测周期内依赖于an进程的指令集合记录到an内存异常列表中,输出检测报告;
71.可见,通过给每个进程模块分配内存上限,在每个检测周期内会记录每个模块的实际使用内存,并与内存上限阈值进行比较,当出现模块内存超阈值情况下,检测其他模块使用内存与阈值差值,将阈值差较大的上限值调小,调大超过内存阈值的模块的内存上限,如果所有模块的使用内存与阈值差值均不满足分配要求,则直接调大超过内存阈值的模块的内存上限,如果总内存超过系统的剩余内存,则将该模块重启。同时,每个检测周期内会记录各个内存异常的模块的指令集,输出异常数据报告,记录排查内存异常原因。由此,实现了内存的自动控制,同时不影响业务,增强系统的鲁棒性。
72.相应的,本技术实施例还公开了一种内存控制装置,参见图4所示,该装置包括:
73.内存分配模块11,用于为存储系统内每个进程模块分配内存上限;
74.目标进程模块确定模块12,用于按照预设时间间隔周期性获取所述进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块;
75.内存调整模块13,用于确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限。
76.由上可见,本实施例中为存储系统内每个进程模块分配内存上限;按照预设时间间隔周期性获取所述进程模块对应的实际使用内存,并筛选出实际使用内存大于内存上限的进程模块作为目标进程模块;确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限。可见,通过给每个进程模块分配内存使用上限阈值,在每个检测周期内检测各个内存的使用情况,如果出现内存使用超上限情况则进行内存上限调整,由此,通过实时检测所有进程模块使用内存,在每个检测周期内对目标进程模块内存上限进行实时再分配,实现了内存的自动控制,同时不影响业务,最大限度的降低整个系统内存异常的概率,增强系统的鲁棒性。
77.在一些具体实施例中,所述内存调整模块13具体可以包括:
78.内存剩余量计算单元,用于计算除所述目标进程模块外,其余所述进程模块的内存剩余量;所述内存剩余量为内存上限与实际使用内存的差值;
79.内存调整单元,用于根据所述内存剩余量和筛选条件确定内存上限调整方式,并根据所述内存上限调整方式上调所述目标进程模块的内存上限;所述筛选条件为基于所述目标进程模块的实际使用内存和预设百分比确定的条件。
80.在一些具体实施例中,所述内存调整单元具体可以包括:
81.第一内存调整单元,用于根据所述筛选条件计算筛选阈值,若存在内存剩余量大于筛选阈值的进程模块,则将该进程模块作为未完全占用进程模块;按照预设下调幅度下调所述未完全占用进程模块的内存上限,以得到空闲内存,并将所述空闲内存分配给所述目标进程模块,以上调所述目标进程模块的内存上限。
82.在一些具体实施例中,所述内存调整单元具体可以包括:
83.第二内存调整单元,用于根据所述筛选条件计算筛选阈值,若不存在内存剩余量
大于筛选阈值的进程模块,则按照预设上调幅度直接上调所述目标进程模块的内存上限。
84.在一些具体实施例中,所述内存控制装置具体可以包括:
85.重启单元,用于根据所述目标进程模块调整后的内存上限,判断所述存储系统的内存上限总值是否大于所述存储系统的剩余内存量;若是,则重启所述目标进程模块,并将所述目标进程模块的内存上限调回为最近一次的历史内存上限。
86.在一些具体实施例中,所述内存控制装置具体可以包括:
87.指令记录单元,用于将所述目标进程模块关联的目标指令集合记录到所述目标进程模块对应的异常列表中,并根据所述异常列表生成检测报告。
88.在一些具体实施例中,所述内存控制装置具体可以包括:
89.指令获取单元,用于向所述存储系统添加对应的事件管理器,并通过所述事件管理器获取指令;
90.状态检测单元,用于确定出与所述指令对应的所有关联进程模块,检测所述关联进程模块的运行状态;
91.指令下发单元,用于若所有所述关联进程模块的运行状态均为正常,则下发所述指令;
92.指令延迟下发单元,用于否则,缓存所述指令,直至监测到所有所述关联进程模块的运行状态均为正常时下发所述指令。
93.进一步的,本技术实施例还公开了一种电子设备,参见图5所示,图中的内容不能被认为是对本技术的使用范围的任何限制。
94.图5为本技术实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的内存控制方法中的相关步骤。
95.本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
96.另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源包括操作系统221、计算机程序222及包括内存上限在内的数据223等,存储方式可以是短暂存储或者永久存储。
97.其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,以实现处理器21对存储器22中海量数据223的运算与处理,其可以是windows server、netware、unix、linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的内存控制方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
98.进一步的,本技术实施例还公开了一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现前述任一实施例公开的内存控制方法步骤。
99.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
100.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
101.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
102.以上对本发明所提供的一种内存控制方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1