CN115421907A - 内存回收方法、装置、电子设备及存储介质 - Google Patents
内存回收方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115421907A CN115421907A CN202210993497.6A CN202210993497A CN115421907A CN 115421907 A CN115421907 A CN 115421907A CN 202210993497 A CN202210993497 A CN 202210993497A CN 115421907 A CN115421907 A CN 115421907A
- Authority
- CN
- China
- Prior art keywords
- memory
- water level
- pressure
- memory recovery
- recovery
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请实施例公开了一种内存回收方法、装置、电子设备及存储介质。所述方法包括:获取当前的内存回收压力;若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线;基于所述调整后的水位线,进行内存回收。通过上述方法,在检测到系统的内存回收压力满足预设压力阈值的情况下,将原本的水位线进行调高,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。
Description
技术领域
本申请属于信息技术领域,具体涉及一种内存回收方法、装置、电子设备及存储介质。
背景技术
内存管理是系统的核心技术之一,对提高系统的用户体验和系统运行的稳定性具有关键作用。当内存紧张时,系统会出现卡顿、运行出错、崩溃等一系列问题。相关技术中,可通过内存回收缓解内存紧张,但是常规的内存管理方式存在回收效率低的问题。
发明内容
鉴于上述问题,本申请提出了一种内存回收方法、装置、电子设备以及存储介质,以实现改善上述问题。
第一方面,本申请实施例提供了一种内存回收方法,所述方法包括:获取当前的内存回收压力;若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线;基于所述调整后的水位线,进行内存回收。
第二方面,本申请实施例提供了一种内存回收装置,所述装置包括:压力获取单元,用于获取当前的内存回收压力;提高单元,用于若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线;回收单元,用于基于所述调整后的水位线,进行内存回收。
第三方面,本申请实施例提供了一种电子设备,包括一个或多个处理器以及存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码运行时执行上述的方法。
本申请实施例提供了一种内存回收方法、装置、电子设备及存储介质。首先获取当前的内存回收压力,在内存回收压力满足预设压力阈值的情况下,进行提高水位线操作,得到调整后的水位线,从而基于调整后的水位线,进行内存回收。通过上述方法,在检测到系统的内存回收压力满足预设压力阈值的情况下,将原本的水位线进行调高,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一实施例提出的一种内存回收方法的应用场景示意图;
图2示出了本申请一实施例提出的一种内存回收方法的应用场景示意图;
图3示出了本申请一实施例提出的一种内存回收方法的流程图;
图4示出了本申请另一实施例提出的一种内存回收方法的流程图;
图5示出了本申请另一实施例中步骤S210-步骤S230所述的过程的示意图;
图6示出了本申请再一实施例提出的一种内存回收方法的流程图;
图7示出了本申请再一实施例中步骤S310-步骤S340所述的过程的示意图;
图8示出了本申请又一实施例提出的一种内存回收方法的流程图;
图9示出了本申请实施例提出的一种内存回收装置的结构框图;
图10示出了本申请实施例提出的一种内存回收装置的结构框图;
图11示出了本申请实时中的用于执行根据本申请实施例的内存回收方法的电子设备或服务器的结构框图;
图12示出了本申请实时中的用于保存或者携带实现根据本申请实施例的内存回收方法的程序代码的存储单元。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在各种操作系统中,如Linux操作系统,由于对磁盘进行读、写操作的速度较慢,为加快对磁盘进行文件读或写的速度,操作系统内核在对磁盘进行读或写的操作过程中,将大量信息缓存在操作系统的内存中;采用该种方式虽然加快了对磁盘进行读、写操作的速度,但是在很多通讯系统中,由于业务需求,上层业务需要对大量的文件进行创建、读、写、删除等操作,因此,采用该种方式,将文件的大量信息缓存在操作系统的内存中会占用大量的内存空间,并且,操作系统应用层中的各个应用模块需要记录日志文件以跟踪各应用模块的运行状态,以便运维人员在系统出现异常时进行故障排查,这也会消耗大量的内存空间。
目前,对文件进行创建、读、写、删除等操作以及应用层中的各应用模块记录日志文件等,所消耗的内存空间主要为buffer cache(缓冲器高速缓冲存储器)和page cage(页高速缓冲存储器)中的内存;当buffer cache和page cage的内存占用较多时,即空闲内存低于某一个阈值时将可能导致系统低端可用内存不足的问题。因此,若操作系统的内存被大量用于文件缓存而不能及时释放时,则在系统运行过程中可能由于某些应用程序分配不到内存而可能导致整个系统的运行发生异常。从而可以通过内存回收来缓解内存紧张,以避免系统的运行发生异常。
内存回收主要是针对匿名页和文件页进行的。对于匿名页,在内存回收过程中会筛选出一些不经常使用的匿名页,将它们写入到swap分区中,然后作为空闲页框释放到伙伴系统。而对于文件页,在内存回收过程中也会筛选出一些不经常使用的文件页,如果此文件页中保存的内容与磁盘中文件对应内容一致,说明此文件页是一个干净的文件页,就不需要进行回写,直接将此文件页作为空闲页框释放到伙伴系统中,相反,如果文件页保存的数据与磁盘中文件对应的数据不一致,则认为此文件页为脏页,需要先将此文件页回写到磁盘中对应数据所在位置上,然后再将此文件页作为空闲页框释放到伙伴系统中。这样当内存回收完成后,系统空闲的页框数量就会增加,从而能够缓解内存压力。但是上述方法在回收过程中会对系统的I/O造成很大的压力,因此,在系统内,由于内存回收是以zone为单元进行的,一般会为每个zone设置一条水位线,当此zone的空闲页框数量不满足这条水位线时,就会对此zone执行内存回收,而此zone的空闲页框数量满足这条水位线时,就不会对此zone进行内存回收。其中,zone为划分的内存管理区域,用于表示不同范围的内存。
但实际上,每个zone对应有三条水位线,这三条水位线分别是最小水位线(WMARK_MIN)、低水位线(WMARK_LOW)和高水位线(WMARK_HIGH),它们都保存在zone的watermark[NR_WMARK]数组中,这个数组中保存的是各条水位线要求的页框数量,而每条水位线都会对内存回收造成影响。
其中,上述三条水位线的描述如下:
watermark[WMARK_MIN](min水位线):在快速分配失败后的慢速分配中会使用此水位线进行分配,如果慢速分配过程中使用此水位线还是无法进行分配,那就会执行直接内存回收和快速内存回收。
watermark[WMARK_LOW](low水位线):也叫低水位线,是快速分配的默认水位线,在分配内存过程中,如果zone的空闲页框数量低于此水位线对应的页框数量,系统会对zone执行快速内存回收。
watermark[WMARK_HIGH](high水位线):也叫高水位线,是zone对于空闲页框数量比较满意的一个值,当zone的空闲页框数量高于这条水位线对应的空闲页框数量时,表示zone的空闲页框较多。所以对zone进行内存回收时,目标也是希望将zone的空闲页框数量提高到此值以上,系统会将此水位线用于oomkill进行内存回收。
三条水位线对应的空闲页框数量的关系是:min水位线<low水位线<high水位线。在系统初始化期间,根据系统中整个内存的数量与每个zone管理的页框数量,计算出每个zone的min水位线对应的页框数量,然后low水位线对应的页框数量=min水位线对应的页框数量+(min水位线对应的页框数量/4),high水位线对应的页框数量=min水位线对应的页框数量+(min水位线对应的页框数量/2)。
发明人在对相关的内存回收方法的研究中发现,相关的内存回收方式,在对内存进行回收时,回收效率还有待提高。
因此,发明人提出了本申请中的内存回收方法、装置、电子设备及存储介质。首先获取当前的内存回收压力,在内存回收压力满足预设压力阈值的情况下,进行提高水位线操作,得到调整后的水位线,从而基于调整后的水位线,进行内存回收。通过上述方法,在检测到系统的内存回收压力满足预设压力阈值的情况下,将原本的水位线进行调高,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。
在本申请实施例中,所提供的内存回收方法可以由电子设备执行。在由电子设备执行的这种方式中,本申请实施例提供的内存回收方法中所有步骤可以均由电子设备执行。例如,如图1所示,可以通过电子设备100中的处理器执行获取当前的内存回收压力;若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线;基于所述调整后的水位线,进行内存回收。
再者,本申请实施例提供的内存回收方法也可以由服务器(云端)进行执行。对应的,在由服务器执行的这种方式中,可以由电子设备获取当前的内存回收压力,并将当前的内存回收压力同步发送给服务器,然后由服务器实时的执行若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线;基于所述调整后的水位线,进行内存回收。
另外,还可以由电子设备和服务器协同执行。在由电子设备和服务器协同执行的这种方式中,本申请实施例提供的内存回收方法中的部分步骤由电子设备执行,而另外部分的步骤则由服务器来执行。
示例性的,如图2所示,电子设备100可以执行内存回收方法包括的:获取当前的内存回收压力,然后由服务器200来执行若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线,再由电子设备100来执行基于所述调整后的水位线,进行内存回收。
需要说明的是,在由电子设备和服务器协同执行的这种方式中,电子设备和服务器分别执行的步骤不限于上述示例中所介绍的方式,在实际应用中,可以根据实际情况动态的调整电子设备和服务器分别执行的步骤。
需要说明的是,该电子设备100除了可以为图1和图2中所示的智能手机外,还可以为车机设备、可穿戴设备、平板电脑、笔记本电脑、智能音箱等。服务器120可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统。
下面将结合附图具体描述本申请的各实施例。
请参阅图3,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S110:获取当前的内存回收压力。
在本申请实施例中,系统的内存包括被占用内存和可用内存,其中,被占用内存主要指当前正在运行的进程和服务所占用的内存以及内核运行所占用的内存,可用内存指系统的空闲内存和缓存。内存回收压力用于表征系统的可用内存的大小,内存回收压力越大,表征系统的可用内存越少;反之,内存回收压力越小,表征系统的可用内存越多。
在本申请实施例中,电子设备的系统和应用程序的进程的运行,都需要系统内核为其分配内存空间。并且随着系统的运行情况,内核不断地进行着内存的回收与分配等。系统的内存回收压力随着内核进行的内存的回收和分配情况实时变化。
作为一种方式,系统当前的内存回收压力可以在内核进行内存回收时进行获取。具体的,当系统开始进行内存分配时,检测到系统当前的内存状态处于低内存状态时内核会进行内存回收,当内核开始进行内存回收时,开始获取当前的内存回收压力。其中,系统当前的内存状态处于低内存状态表征系统当前的空闲内存低于zone的low水位线对应的空闲页框数量。
作为另一种方式,系统可以响应于预设指令,获取当前的内存回收压力。其中,预设指令用于指示获取当前的系统内存回收压力。在本申请实施例中,预设指令可以为预设进程/线程运行触发的指令,也可以为其他电子设备或服务器发送的指令,在此不做具体限定。
步骤S120:若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线。
在本申请实施例中,预设压力阈值为预先设置的用于区分内存回收压力大或不大的临界压力值。
作为一种方式,在获取到当前的内存回收压力后,将当前的内存回收压力和预设压力阈值进行比较,判断当前的内存回收压力大不大,若内存回收压力小于或等于预设压力阈值,则确定内存回收压力满足预设压力阈值,进行提高水位线操作,也就是说,在当前的内存回收压力不大的情况下,才进行boost_watermark,即将zone的min水位线、low水位线、high水位线调高,得到调高后的水位线。其中,在对zone的min水位线、high水位线调高的原则可以为每次发现内核出现偷页现象(可能导致物理内存外碎片化)时,提高4Mbytes,最大可以提高到1.5倍high水位线。
步骤S130:基于所述调整后的水位线,进行内存回收。
可以理解的是,系统对内存回收分为两种:直接内存回收和kswapd内存回收。其中,直接内存回收处于慢速分配过程中,直接内存回收只有在一种情况下会使用,在慢速分配中无法从zonelist的所有zone中以min水位线分配页框,并且在进行异步内存压缩后,还是无法分配到页框时,就对zonelist中的所有zone进行一次直接内存回收。可选的,直接内存回收是针对zonelist中的所有zone的,它并不像快速内存回收和kswapd内存回收,只会对zonelist中空闲页框不达标的zone进行内存回收。
kswapd内存回收也叫做后台内存回收,发生在kswapd内核线程中,每个node有一个kswapd内核线程,也就是kswapd内核线程中的内存回收,是只针对所在物理内存节点node的,并且只会对该node中分配了order页框数量后空闲页框数量小于预设页框数量的zone进行内存回收,并不会对此node中的所有zone进行内存回收。其中,预设页框数量为此zone的high水位线对应的页框数量+保留页框数量。
在本申请实施例中,直接内存回收和kswapd内存回收的区别在于,kswapd内存回收是后台回收的,所以不会阻塞当前分配内存的进程;而直接内存回收会直接阻塞当前分配内存的进程。因此,针对这种情况,kswapd可以按照当前的boost_watermark机制进行内存回收,直接内存回收只有在内存回收压力不大的情况下,才能进行boost_watermark操作。
因此只有在进行直接内存回收的情况下才需要获取当前的内存回收压力,也就是说,只有在要进行直接内存回收的情况下,才会执行步骤S110-步骤S130。
作为一种方式,当通过上述方式对zone的水位线进行提高后,基于调高后的水位线判断是否进行直接内存回收操作。此时,在判断是否进行直接内存回收时,由于zone的水位线被提高了,因此,可以在zone的空闲页框数量不满足调高后的水位线后,就会触发进行直接内存回收。
本申请提供的一种内存回收方法,首先获取当前的内存回收压力,在内存回收压力满足预设压力阈值的情况下,进行提高水位线操作,得到调整后的水位线,从而基于调整后的水位线,进行内存回收。通过上述方法,在检测到系统的内存回收压力满足预设压力阈值的情况下,将原本的水位线进行调高,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。
请参阅图4,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S210:若当前的空闲内存低于预设内存,则开始进行内存回收操作。
在本申请实施例中,预设内存为预先设置的表征当前的空闲内存很低的内存值。
作为一种方式,系统内核可以实时监测系统剩余的空闲内存,当监测到当前的空闲内存低于预设内存时,触发开始进行内存回收操作。
步骤S220:获取所述内存回收操作对应的开始时间和结束时间。
在本申请实施例中,开始时间为内存回收操作的开始时间,结束时间为内存回收操作的结束时间。
作为一种方式,记录每次进行内存回收操作的开始时间和结束时间,从而可以基于内存回收操作的开始时间和结束时间,确定每次内存回收操作对应的内存回收压力。
步骤S230:基于所述开始时间和所述结束时间,确定当前的内存回收压力。
在本申请实施例中,将单次内存回收操作对应的结束时间和开始时间相减,得到当前的内存回收压力。
具体的,在进行内存回收开始时增加时间戳1,回收的过程中不断的获取时间戳2,在单次内存回收操作结束后,计算单次内存回收持续的时间,记为STALL_TIME,STALL_TIME=时间戳2-时间戳1,STALL_TIME即表示内存回收压力。
作为一种方式,确定当前的内存回收压力之后,判断当前的空闲内存是否充足,若充足,将当前的内存回收压力置为预设值;若不充足,则继续执行下一次内存回收操作。其中,预设值为预先设置的初始值,表征内存回收压力为0。
在本申请实施例中,当内存回收成功后,即内存充足后需要立即将STALL_TIME设置为预设值,比如0,这样就可以避免预读取过程中出现误判。
可选的,在本申请实施例中,在下次获取当前的内存回收压力之前,可以通过判断当前的内存回收压力的值是否为预设值,从而可以确定下一次的内存回收操作是否已经开始执行;若当前的内存回收压力的值为预设值为预设值,那么可以确定下一次的内存回收操作还未开始执行,若当前的内存回收压力的值不为预设值,那么确定下一次的内存回收操作已经开始执行。
上述步骤S210-步骤S230所示的过程可以如图5所示,系统内核实时监测内存负载,当进行内存分配发现是低内存时,内核会进行内存回收,在内存回收开始时记录时间戳1,内存回收过程中不断获取时间戳2,基于时间戳1和时间戳2计算STALL_TIME,STALL_TIME=时间戳2-时间戳1,在当次内存回收结束后,判断当前的空闲内存是否充足,若充足,将STALL_TIME置为0,内存回收结束;若不充足,则继续进行内存回收操作。
步骤S240:若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线。
步骤S250:基于所述调整后的水位线,进行内存回收。
本申请提供的一种内存回收方法,若当前的空闲内存低于预设内存,则开始进行内存回收操作,然后获取该内存回收操作对应的开始时间和结束时间,基于开始时间和结束时间,确定当前的内存回收压力,若内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线,最后基于调整后的水位线,进行内存回收。通过上述方法,在检测到系统的内存回收压力满足预设压力阈值的情况下,将原本的水位线进行调高,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。
请参阅图6,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S310:获取当前的内存回收压力。
步骤S320:检测所述内存回收压力是否满足预设压力阈值,若满足,执行步骤S330;若不满足,执行步骤S340。
作为一种方式,若所述内存回收压力小于或等于第一预设压力阈值,且所述内存回收压力小于或等于第二预设压力阈值,确定满足所述预设压力阈值,其中,所述第一预设压力阈值大于所述第二预设压力阈值。
在本申请实施例中,第一预设压力阈值和第二预设压力阈值均为预先设置表征当前的内存回收压力不大的压力值。其中,第一预设压力阈值可以为表征当前的内存回收压力不大的最大压力值,第二预设压力阈值为比第一预设压力阈值小的压力值,可以用于表征当前的内存回收压力很小。
也就是说,若当前的内存回收压力小于或等于第一预设压力预设,则确定系统当前的内存压力不大;若当前的内存回收压力小于或等于第二预设压力阈值,则确定系统当前的内存压力很小。
若当前的内存回收压力小于或等于第一预设压力阈值,且当前的内存回收压力小于或等于第二预设压力阈值,则确定当前的内存回收压力很小。
作为另一种方式,若所述内存回收压力小于或等于第一预设压力阈值,且所述内存回收压力大于所述第二预设压力阈值,确定满足所述预设压力阈值。
若当前的内存回收压力小于或等于第一预设压力阈值,且当前的内存回收压力大于第二预设压力阈值,则确定当前的内存回收压力处于第一预设压力阈值和第二预设压力阈值之间,确定当前的内存回收压力不大。
上述情况均可以表征当前的内存回收压力不大,则可以进行提高水位线操作。
步骤S330:进行第一提高水位线操作,得到第一水位线;基于所述第一水位线,进行内存回收。
其中,所述第一提高水位线操作用于将原水位线提高至最大值。
作为另一种方式,步骤S330还可以包括进行第二提高水位线操作,得到第二水位线;基于所述第二水位线,进行内存回收。
其中,所述第二提高水位线操作用于将原水位线提高至预设值,所述预设值小于所述最大值。
在本申请实施例中,原水位线为未进行提高操作前设置的水位线。第一提高水位线操作对原水位线的提高程度和第二提高水位线操作对原水位线的提高程度不同,第一提高水位线操作对原水位线的提高程度大于第二提高水位线操作对原水位线的提高程度。
其中,第一提高水位线操作用于将原水位线提高至可以提高的最大值,第二提高水位线操作对原水位线的提高程度为第一提高水位线操作对原水位线提高程度的一半。也就是说,第一提高水位线操作用于将原水位线提高最大增量,第二提高水位线操作用于将原水位线提高1/2最大增量。示例性的,若最大增量为10Mbytes,则1/2最大增量为5Mbytes。也就是说,第一提高水位线操作用于将原水位线提高10Mbytes,那么第二提高水位线操作用于将原水位线提高5Mbytes。
在当前的内存回收压力不同的情况下,提高水位线操作对原水位线提高的程度不同,进而第一水位线和第二水位线对应的提前进行内存回收的时间不同。由于进行提高水位线操作后的第一水位线大于进行提高水位线操作后的第二水位线,因此,通过第一水位线判断是否进行直接内存回收的时间可以先于通过第二水位线判断是否进行直接内存回收的时间。
步骤S340:按照原水位线进行内存回收。
在本申请实施例中,若当前的内存回收压力大于第一预设压力阈值,则确定当前的内存回收压力很大,则不对原水位线进行提高水位线操作,直接按照原水位线判断是否进行直接内存回收操作。
示例性的,步骤S310-步骤S340所述的过程可以如图7所示,在进入直接内存回收判断流程后,在获取当前的内存回收压力STALL_TIME,然后判断当前的内存回收压力STALL_TIME是否大于阈值1(相当于第一预设压力阈值),若当前的内存回收压力大于阈值1,则boost_watermark调为0,即不对原水位线进行提高水位线操作;若当前的内存回收压力小于或等于阈值1,判断当前的内存回收压力是否大于阈值2(相当于第二预设压力阈值),若当前的内存回收压力大于阈值2,则boost_watermark降低为一半,即对原水位线进行第二提高水位线操作,将原水位线提高至预设值;若当前的内存回收压力小于或等阈值2,则boost_watermark保持全量,即对原水位线进行第一提高水位线操作,将原水位线提高至最大值。当通过上述方式对原水位线进行调整后,通过调整后的水位线进行直接内存回收。
本申请提供的一种内存回收方法,首先获取当前的内存回收压力,检测内存回收压力是否满足预设压力阈值,若满足,则进行第一提高水位线操作,得到第一水位线,基于第一水位线进行内存回收;若不满足,则按照原水位线进行内存回收操作。通过上述方法,在当前的内存回收压力满足预设压力阈值的情况下,此时进程进入内存回收很快就可以完成内存回收,对进程的阻塞不大,那么此时就可以在进行内存回收时进行提高水位线操作,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。再者,在当前的内存回收压力不满足预设压力阈值的情况下,不进行提高水位线操作,从而可以减少进程进入慢速路径的次数,提高了进程的性能。
请参阅图8,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S410:获取当前运行的进程。
在本申请实施例中,当前运行的进程可以为当前进行内存回收的进程。
作为一种方式,可以预先为每一个进程设置一个运行标识,进而可以通过设置的运行标识来获取当前运行的进程。其中,运行标识用于标识正在运行的进程是什么进程。
作为另一种方式,可以调用对应的函数唤醒对应的进程,进而可以通过检测当前正在运行的函数来获取当前运行的进程。
步骤S420:判断进程是否为后台回收进程,若是,执行步骤S430;若否,执行步骤S440。
在本申请实施例中,后台回收进程为kswapd进程。
作为一种方式,可以通过预设函数来判断当前运行的进程是否为kswapd进程。具体的,由于内核原生的kswapd内存回收流程已经支持boost_watermark,所以不用在kswapd内存回收流程中额外添加boost_watermark机制,但是由于kswapd内存回收流程调用的函数方法和直接内存回收流程调用的部分函数方法是一样的,所以需要在这些函数方法中加上current_is_kswapd()的判断,只有当前运行的进程是kswapd时才能让boost_watermark直接生效,不然要进行直接内存回收流程的判断。其中,current_is_kswapd()用于判断当前运行的进程是否为kswapd进程。
作为另一种方式,可以通过当前运行的进程的运行标识来确定当前运行的进程是否为kswapd进程。若当前运行的进程的运行标识表征当前运行的进程为kswapd进程,那么可以直接执行步骤S430。
可选的,还可以通过检测当前运行的进程的唤醒机制来确定当前运行的进程是否为kswapd进程。具体的,当内核分配物理页面时,由于系统内存短缺,没法在低水位情况下分配内存,因此会唤醒kswapd进程来异步回收内存。因此,当检测到当前运行的进程为由于内存不足导致分配内存失败时唤醒的进程,则确定当前运行的进程为kswapd进程;反之,则确定当前运行的进程不是kswapd进程。
再者,还可以根据当前运行的进程和调用者进程之间关系来确定当前运行的进程是否为kswapd进程。若当前运行的进程和调用者进程之间的关系为异步关系,那么确定当前运行的进程为kswapd进程;反之,则确定当前运行的进程不是kswapd进程。
在当前运行的进程为kswapd进程的情况下,则执行kswapd内存回收流程;反之则执行直接内存回收流程,在执行直接内存回收流程时。
步骤S430:基于预设水位线进行后台内存回收。
在本申请实施例中,预设水位线为基于原boost_watermark机制提高后的水位线。
步骤S440:获取当前的内存回收压力。
步骤S450:若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线。
步骤S460:基于所述调整后的水位线,进行内存回收。
在本申请实施例中,之所以要在直接内存回收流程中加入内存回收压力的检测,是因为boost_watermark对外部碎片还是存在一定的优化作用的,如果说当前的内存回收压力比较小,那么此时进程进入直接内存回收很快就可以回收完内存,对进程的阻塞不大,那么此时就可以在直接内存回收时进行boost_watermark;相反的,如果此时内存回收压力比较大,那么就不建议在直接内存回收时进行boost_watermark了,因为容易导致系统因为进行boost_watermark而造成以下两个问题:(1)进程由于频繁进入慢速路径,所以进程的性能比较差;(2)由于水位线被设置得比较高,所以系统相当于有一大部分内存进程是使用不到的。
因此,在系统的内存回收压力比较大的时候,直接按照原水位线进行内存回收,可以提高内存的使用率。
本申请提供的一种内存回收方法,首先获取当前运行的进程,判断进程是否为后台回收进程,若是,则基于预设水位线进行后台内存回收;若否,则获取当前的内存回收压力,若内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线,最后基于调整后的水位线,进行内存回收。通过上述方法,在检测到系统的内存回收压力满足预设压力阈值的情况下,将原本的水位线进行调高,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。
请参阅图9,本申请实施例提供的一种内存回收装置500,所述装置500包括:
压力获取单元510,用于获取当前的内存回收压力。
作为一种方式,压力获取单元510具体用于若当前的空闲内存低于预设内存,则开始进行内存回收操作;获取所述内存回收操作对应的开始时间和结束时间;基于所述开始时间和所述结束时间,确定当前的内存回收压力。
作为另一种方式,压力获取单元510还具体用于将所述当前的内存回收压力置为预设值。
可选的,压力获取单元510还用于若所述进程不为后台回收进程,则获取当前的内存回收压力。
提高单元520,用于若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线。
作为一种方式,提高单元520具体用于若所述内存回收压力小于或等于第一预设压力阈值,且所述内存回收压力小于或等于第二预设压力阈值,确定满足所述预设压力阈值,进行第一提高水位线操作,得到第一水位线,其中,所述第一预设压力阈值大于所述第二预设压力阈值,所述第一提高水位线操作用于将原水位线提高至最大值;或者,若所述内存回收压力小于或等于第一预设压力阈值,且所述内存回收压力大于所述第二预设压力阈值,确定满足所述预设压力阈值,进行第二提高水位线操作,得到第二水位线,所述第二提高水位线操作用于将原水位线提高至预设值,所述预设值小于所述最大值。
回收单元530,用于基于所述调整后的水位线,进行内存回收。
作为一种方式,回收单元530还用于若所述内存回收压力不满足所述预设压力阈值,则按照原水位线进行内存回收。
可选的,请参阅图10,所述装置500还包括:
进程判断单元540,用于获取当前运行的进程;若所述进程为后台回收进程,基于预设水位线进行后台内存回收。
需要说明的是,本申请中装置实施例与前述方法实施例是相互对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
下面将结合图11对本申请提供的一种电子设备或服务器进行说明。
请参阅图11,基于上述的内存回收方法、装置,本申请实施例还提供的另一种可以执行前述内存回收方法的电子设备或服务器800。电子设备或服务器800包括相互耦合的一个或多个(图中仅示出一个)处理器802、存储器804以及网络模块806。其中,该存储器804中存储有可以执行前述实施例中内容的程序,而处理器802可以执行该存储器804中存储的程序。
其中,处理器802可以包括一个或者多个处理核。处理器802利用各种接口和线路连接整个电子设备或服务器800内的各个部分,通过运行或执行存储在存储器804内的指令、程序、代码集或指令集,以及调用存储在存储器804内的数据,执行电子设备或服务器800的各种功能和处理数据。可选地,处理器802可以采用数字信号处理(Digital SignalProcessing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器802可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics ProcessingUnit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器802中,单独通过一块通信芯片进行实现。
存储器804可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器804可用于存储指令、程序、代码、代码集或指令集。存储器804可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备或服务器800在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
所述网络模块806用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯,例如和音频播放设备进行通讯。所述网络模块806可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。所述网络模块806可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。例如,网络模块806可以与基站进行信息交互。
请参考图12,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读存储介质900中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质900可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质900包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质900具有执行上述方法中的任何方法步骤的程序代码910的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码910可以例如以适当形式进行压缩。
本申请提供的一种内存回收方法、装置、电子设备以及存储介质,首先获取当前的内存回收压力,在内存回收压力满足预设压力阈值的情况下,进行提高水位线操作,得到调整后的水位线,从而基于调整后的水位线,进行内存回收。通过上述方法,在检测到系统的内存回收压力满足预设压力阈值的情况下,将原本的水位线进行调高,从而可以基于调高后的水位线判断是否进行内存回收,使得可以提前进行内存回收,进而释放更多的内存给进程使用,提高了内存的回收效率。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
Claims (10)
1.一种内存回收方法,其特征在于,所述方法包括:
获取当前的内存回收压力;
若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线;
基于所述调整后的水位线,进行内存回收。
2.根据权利要求1所述的方法,其特征在于,所述获取当前的内存回收压力,包括:
若当前的空闲内存低于预设内存,则开始进行内存回收操作;
获取所述内存回收操作对应的开始时间和结束时间;
基于所述开始时间和所述结束时间,确定当前的内存回收压力。
3.根据权利要求2所述的方法,其特征在于,所述基于所述开始时间和所述结束时间,确定当前的内存回收压力之后还包括:
将所述当前的内存回收压力置为预设值。
4.根据权利要求1所述的方法,其特征在于,所述若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线,包括:
若所述内存回收压力小于或等于第一预设压力阈值,且所述内存回收压力小于或等于第二预设压力阈值,确定满足所述预设压力阈值,进行第一提高水位线操作,得到第一水位线,其中,所述第一预设压力阈值大于所述第二预设压力阈值,所述第一提高水位线操作用于将原水位线提高至最大值;或者,
若所述内存回收压力小于或等于第一预设压力阈值,且所述内存回收压力大于所述第二预设压力阈值,确定满足所述预设压力阈值,进行第二提高水位线操作,得到第二水位线,所述第二提高水位线操作用于将原水位线提高至预设值,所述预设值小于所述最大值。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述内存回收压力不满足所述预设压力阈值,则按照原水位线进行内存回收。
6.根据权利要求1所述的方法,其特征在于,所述获取当前的内存回收压力之前还包括:
获取当前运行的进程;
若所述进程为后台回收进程,基于预设水位线进行后台内存回收。
7.根据权利要求6所述的方法,其特征在于,所述获取当前的内存回收压力,包括:
若所述进程不为后台回收进程,则获取当前的内存回收压力。
8.一种内存回收装置,其特征在于,所述装置包括:
压力获取单元,用于获取当前的内存回收压力;
提高单元,用于若所述内存回收压力满足预设压力阈值,进行提高水位线操作,得到调整后的水位线;
回收单元,用于基于所述调整后的水位线,进行内存回收。
9.一种电子设备,其特征在于,包括一个或多个处理器;一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码被处理器运行时执行权利要求1-7任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210993497.6A CN115421907A (zh) | 2022-08-18 | 2022-08-18 | 内存回收方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210993497.6A CN115421907A (zh) | 2022-08-18 | 2022-08-18 | 内存回收方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115421907A true CN115421907A (zh) | 2022-12-02 |
Family
ID=84198693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210993497.6A Pending CN115421907A (zh) | 2022-08-18 | 2022-08-18 | 内存回收方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115421907A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116225976A (zh) * | 2023-05-05 | 2023-06-06 | 麒麟软件有限公司 | 一种Linux操作系统下的水位线自调整方法及系统 |
-
2022
- 2022-08-18 CN CN202210993497.6A patent/CN115421907A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116225976A (zh) * | 2023-05-05 | 2023-06-06 | 麒麟软件有限公司 | 一种Linux操作系统下的水位线自调整方法及系统 |
CN116225976B (zh) * | 2023-05-05 | 2023-08-08 | 麒麟软件有限公司 | 一种Linux操作系统下的水位线自调整方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111352861B (zh) | 内存压缩方法、装置及电子设备 | |
CN111158910B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN110888746B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN111078406B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN110764906B (zh) | 内存回收处理方法、装置、电子设备以及存储介质 | |
WO2021057619A1 (zh) | 内存回收方法、装置、电子设备及存储介质 | |
WO2021072716A1 (zh) | 内存管理方法、装置、电子设备和计算机可读介质 | |
CN108205473B (zh) | 内存处理方法及装置、计算机装置及计算机可读存储介质 | |
CN108228449B (zh) | 终端设备控制方法及装置、终端设备及计算机可读存储介质 | |
CN110765031B (zh) | 数据存储方法、装置、移动终端及存储介质 | |
CN110727607B (zh) | 内存回收方法、装置以及电子设备 | |
CN111309267B (zh) | 存储空间的分配方法、装置、存储设备及存储介质 | |
US20220035655A1 (en) | Method and Device for Anonymous Page Management, Terminal Device, and Readable Storage Medium | |
CN111274039A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN110968524B (zh) | 数据存储控制方法、装置、存储介质及电子装置 | |
CN111324303A (zh) | Ssd垃圾回收方法、装置、计算机设备及存储介质 | |
CN111984413A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN110727605B (zh) | 内存回收方法、装置以及电子设备 | |
CN111930513B (zh) | 文件预读的调整方法、装置、电子设备及存储介质 | |
CN115421909A (zh) | 内存管理方法、装置、电子设备及存储介质 | |
CN115421907A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN110704189A (zh) | 内存回收方法、装置以及电子设备 | |
CN113392037A (zh) | 内存回收方法、装置、计算机设备和存储介质 | |
CN115587049A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN114281724B (zh) | 数据传输方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |