CN115421909A - 内存管理方法、装置、电子设备及存储介质 - Google Patents
内存管理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115421909A CN115421909A CN202211003146.2A CN202211003146A CN115421909A CN 115421909 A CN115421909 A CN 115421909A CN 202211003146 A CN202211003146 A CN 202211003146A CN 115421909 A CN115421909 A CN 115421909A
- Authority
- CN
- China
- Prior art keywords
- memory
- preset
- recovery
- parameter
- pressure
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 580
- 238000007726 management method Methods 0.000 title claims abstract description 41
- 238000011084 recovery Methods 0.000 claims abstract description 198
- 238000000034 method Methods 0.000 claims abstract description 77
- 230000008569 process Effects 0.000 claims abstract description 35
- 238000010606 normalization Methods 0.000 claims abstract description 22
- 238000004064 recycling Methods 0.000 claims description 38
- 230000001105 regulatory effect Effects 0.000 abstract description 13
- 230000000694 effects Effects 0.000 abstract description 9
- 230000006866 deterioration Effects 0.000 abstract description 8
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 7
- 238000012544 monitoring process Methods 0.000 description 7
- 230000001960 triggered effect Effects 0.000 description 6
- 238000013508 migration Methods 0.000 description 5
- 230000005012 migration Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
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
本申请实施例公开了本申请实施例提供了一种内存管理方法、装置、电子设备及存储介质。该内存管理方法包括:首先获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载,然后若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
Description
技术领域
本申请属于计算机技术领域,具体涉及一种内存管理方法、装置、设备及可读存储介质。
背景技术
在各种操作系统中,比如Linux操作系统,由于系统长时间持续地工作,任务占用系统内存较多,容易造成内存不足,让系统运行的性能降低。内存规整是基于内核的页面迁移机制,将可移动页面进行迁移,从而将离散的页面整合成连续的页面,保证系统能够正常运行,提高系统运行的性能。相关的内存管理方法,在进入内存规整的时机方面,进入的时机还有待进一步优化。
发明内容
鉴于上述问题,本申请提出一种内存管理方法、装置、电子设备及存储介质,以实现改善上述问题。
第一方面,本申请实施例提供了一种内存管理方法,所述方法包括:获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载;若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。
第二方面,本申请实施例提供了一种内存管理装置,所述装置包括内存回收参数获取单元、内存回收参数比较单元。内存回收参数获取单元,用于获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载;内存回收参数比较单元,用于若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。
第三方面,本申请实施例提供了一种电子设备,包括一个或多个处理器以及存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码运行时执行上述的方法。
本申请实施例提供了一种内存管理方法、装置、电子设备及存储介质。该内存管理方法包括:首先获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载,然后若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
附图说明
为了更加清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见的,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一实施例提出的一种内存管理方法的流程图;
图2示出了本申请另一实施例提出的一种内存管理方法的流程图;
图3示出了本申请再一实施例提出的一种获取内存回收压力的流程图;
图4示出了本申请再一实施例提出的一种获取CPU负载的流程图;
图5示出了本申请再一实施例提出的一种内存管理方法的流程图;
图6示出了本申请再一实施例提出的一种内存管理方法的流程图;
图7示出了本申请实施例提出的一种内存管理装置的结构框图;
图8示出了本申请实时中的用于执行本申请实施例的内存管理方法的电子设备的结构框图;
图9示出了本申请实时中的用于保存或者携带实现根据本申请实施例的内存管理方法的程序代码的存储单元。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在各种操作系统中,比如Linux操作系统,由于系统长时间持续地工作,任务占用系统内存较多,容易造成内存不足,让系统运行的性能降低。内存规整是基于内核的页面迁移机制,将可移动页面进行迁移,从而将离散的页面整合成连续的页面,保证系统能够正常运行,提高系统运行的性能。相关的内存管理方法,在进入内存规整的时机方面,进入的时机还有待进一步优化。
而发明人在对相关的内存管理方法的研究中发现,相关的内存管理方法,一般是当系统空闲页面低于low水位线,导致内存分配进入慢速路径时,系统需要进行内存回收。在进行内存回收时,系统判断需要回收的内存的大小,若需要回收的内存较小,可以通过应用内核的页面迁移机制对离散页面进行页面迁移,整合出连续页面。在系统中,页面即为内存,连续页面即为连续内存。若腾出的连续内存足够用于对需要回收的内存进行分配,则不对需要回收的内存进行内存回收,从而可以降低系统的内存碎片化程度,并且降低系统触发内存回收的次数。但在上述方法中,在系统的内存剩余处于非常低的情况下,由于内存不足,会导致系统中的进程进入慢速路径。但是又通过内存规整的方式给进程分配了内存,长期会造成进程进入慢速路径的概率增大,对进程的性能影响较大;同时,由于内存规整会通过内核的页面迁移机制将可移动页面进行迁移,从而腾出连续页面,这个过程需要消耗CPU资源,如果在CPU负载较高的时进行内存规整,会导致CPU负载急剧上升,从而导致系统的性能下降。
因此,发明人提出了本申请中的内存管理方法、装置、电子设备及可读存储介质。首先获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载,然后若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
下面将结合附图具体描述本申请的各实施例。
请参阅图1,本申请实施例提供了一种内存管理方法,所述方法包括:
步骤S110:获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载。
作为一种方式,内存回收参数包括内存回收压力和CPU负载。其中,内存回收压力用于表征系统内存的紧张程度,CPU负载用于表征CPU资源的紧张程度。可选的,可以在进行内存回收的过程中获取当前的内存回收压力;在系统通过任务调度子系统进行任务调度时,通过任务调度子系统获取当前的CPU负载。
作为一种方式,系统进行内存回收主要有两个原因,一是系统需要为任何时刻突发的内存申请提供足够的内存,以便cache的使用和其它相关内存的使用,不至于让系统的剩余内存长期处于很少的状态;二是当存在大于空闲内存的内存申请时,由于系统内存短缺,不能满足内存分配的请求,系统会直接触发强制内存回收机制,尝试回收内存来解决问题。内核对于上述两种原因,分别有两种不同的机制,一是Linux系统设计了kswapd后台回收线程,当内核给进程分配内存时,由于系统内存低于low水位线,系统无法在内存低于low水位线的情况下分配内存,因此会唤醒kswapd后台回收线程来异步回收内存,kswapd后台回收线程虽然在系统启动时就会创建,但大多数时候都处于睡眠状态,只有在进程由于内存不足导致分配失败时会被唤醒,从而可以通过kswapd后台回收线程来回收内存,供进程使用;二是Linux系统会触发直接内存回收,在内核调用页分配函数分配内存时,由于系统内存短缺,不能满足分配请求,内核就会触发页面回收机制,尝试回收内存来解决问题。在进行内存分配时,只有当水位线处于low水位线和min水位线之间时,kswapd后台回收线程才进行工作,当水位线低于min水位线时则会触发直接内存回收。其中,内核是系统的核心,它的主要职责包括进程管理、磁盘管理、任务调度和内存管理,能将用户输入的命令转换成计算机硬件能够理解的机器语言,可以直接与硬件联系,并将应用软件发起的请求发送给硬件。
在本申请实施例中,在进行内存分配时,由于系统内存低于预设内存,可能导致内存分配失败,从而使得进程进入慢速路径,在进程进入慢速路径后,会触发内存回收操作。在执行内存回收操作的过程中可以获得单次内存回收持续时间。作为一种方式,可以将单次内存回收持续时间作为内存回收压力,从而获得当前的内存回收压力。
其中,当系统内存大小高于低水位线时,系统可以快速分配和获取内存,该过程为快速路径;而当系统内存大小低于低水位线时,系统则无法正常分配内存,就要进入到慢速路径。
其中,内存回收的类别可以是文件映射的页和匿名页,其中,文件映射的页可以包括page cache、slab中的dcache、icache、用户进程的可执行程序的代码段以及文件映射页面;匿名页可以包括进程使用各种api申请到的物理内存,包括堆、栈、进程间通信中的共享内存、pipe、bss段、数据段以及tmpfs的页,这部分内容没有办法直接回写,需要为它们创建swap区域,这些页也转化成了文件映射的页,能够回写到磁盘。同时,根据页是否是脏的,系统在进行内存回收的时候的处理方式也有所不同,脏页需要先回写到磁盘再回收,而干净的页可以直接释放。
在本申请实施例中,可以在系统进行任务调度时获取CPU负载。CPU负载可以用来显示一段时间内的CPU的运行负载的大小,CPU的负载越大,运行的任务就越多,CPU长时间处于高负载状态,容易对CPU和其它计算机硬件的使用寿命造成不良影响,因此可以通过监测CPU负载的大小,来避免CPU长时间处于高负载的运行状态。
作为一种方式,为了对CPU资源进行合理利用,在获取到CPU的负载状态后,若监测到CPU处于高负载状态,可以将一部分正在运行的占用CPU资源多的任务终止,进而将CPU负载降低;若检测到CPU处于低负载状态,可以再计划运行一部分任务。
作为一种方式,可以在检测到刚开始进行内存回收时,开始获取当前的内存回收压力。具体的,在内存低于低水位线时,系统会触发进行内存回收。内存回收可以包括kswapd内存回收和直接内存回收,前述两种内存回收的触发条件不同,因此,可以通过检测内存回收的触发条件来确定内存回收方式,进而确定内存回收的开始时间。在确定了内存回收的开始时间后,开始获取当前的内存回收压力。
作为另一种方式,可以在监测到系统通过任务调度子系统进行任务调度时,通过任务调度子系统获取当前的CPU负载。具体的,系统中可以设置有任务调度子系统,该任务调度子系统可以包括进行任务调度以及数据读取的功能。在本申请实施例中,主要运用任务调度子系统的数据读取功能,读取当前的CPU负载。可选的,可以预先为每一种任务设置一个任务标识,进而可以通过检测任务标识来确定任务是否被任务调度子系统调度,当检测到对应的任务标识,确定任务调度子系统正在进行任务调度,开始获取当前的CPU负载。
步骤S120:若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。
在本申请实施例中,预设参数阈值用于表征对应的内存回收参数满足条件的阈值。其中,预设参数阈值可以包括预设压力阈值和预设负载阈值,预设压力阈值和预设负载阈值分别与内存回收压力和CPU负载相对应。
其中,内存规整是应用了内核的页面回收机制,将可移动页面进行迁移,进而将离散的页面整合成连续的页面,供下次申请内存使用。
可以理解的是,当一个进程不能完全使用分配给它的固定内存区域时就会产生内存碎片,内存碎片即为不可用的空闲内存,从而会产生大量离散不连续页面,而在某些场景中需要大量的连续页面,若内核无法满足,则会发生内核错误。为了避免发生内核错误,可以通过内存规整的方法来获得满足需求的连续页面。示例性的,在使用的内存分配函数是kmalloc时,要求页面必须是连续的,系统中的空闲内存大小必须大于申请的内存大小,在这种情况下,若系统没有足够的空闲内存,就可以通过内存规整的方法来获得满足需求的连续的页面。
作为一种方式,触发系统进行内存规整有三个途径,一是手动触发,通过写1到/proc/sys/vm/compact_memory节点,会手动内存规整,它会扫描系统中所有的内存节点上的zone,对每个zone都会做一次内存规整,二是kcompactd内核线程触发,所述kcompactd内核线程与页面回收kswapd后台回收线程一样,每个内存节点都会创建一个kcompactd内核线程,将该内核线程命名为“kcompactd0”,“kcompactd1”等,三是直接内存规整,直接内存规整和页面回收一样,当系统监测到内存低于低水位时,无法满足页面分配,会进入慢速路径,在慢速路径中,除了唤醒kswapd后台回收线程外,还会调用_alloc_pages_direct_compact()函数,尝试将离散页面整合成连续页面。
在本申请实施例中,可以将通过前述方法获取到的内存回收参数与预先设置的预设参数阈值进行比较,在确定当前的内存回收参数满足预设参数阈值的情况下,对系统内存进行内存规整。其中,当前的内存回收参数满足预设参数阈值可以包括内存回收压力满足预设压力阈值,以及CPU负载满足负载阈值。
本申请提供的一种内存管理方法,首先获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载,然后若内存回收参数满足预设参数阈值,对系统内存进行内存规整。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
请参阅图2,本申请实施例提供了一种内存管理方法,所述方法包括:
步骤S210:若当前的空闲内存低于预设内存,则开始进行内存回收操作。
在本申请实施例中,系统在进行内存回收操作之前,需要监测当前系统的空闲内存与预设内存之间的关系,若当前系统的空闲内存低于预设内存,则触发开始进行内存回收操作。其中,预设内存用于表征当前系统的空闲内存很低,预设内存可以为用户设置的一个具体数值,也可以为系统内含的内存阈值,系统内含的内存阈值可以为low水位线,在此不做具体限定。
步骤S220:获取所述内存回收操作对应的开始时间和结束时间。
在本申请实施例中,在系统进行内存回收操作的过程中,系统在内存回收操作开始时记录开始时间,在内存回收操作结束时记录结束时间。
步骤S230:基于所述开始时间和所述结束时间,确定当前的内存回收压力。
在本申请实施例中,基于内存回收操作对应的开始时间和结束时间,可以得到内存回收操作的单次内存回收持续时间。其中,单次内存回收持续时间可以为结束时间减去开始时间,单次内存回收持续时间的数值大小即为内存回收压力的数值大小。
当通过上述方法获取到内存回收压力后,可以通过系统判断系统当前的空闲内存是否大于预设内存。若系统监测到进行一次内存回收后,系统当前的空闲内存还是低于预设内存,则再次进行内存回收操作,同时记录单次内存回收持续时间的数值;若系统监测到进行一次内存回收后,系统当前的空闲内存大于预设内存后,则将单次内存回收持续时间设置为0,并结束内存回收操作,以防止系统在对内存进行判断时出现误判断,避免内存回收压力的监测出现错误。
示例性,步骤S210、步骤S220和步骤S230所述的过程可以如图3所示,系统在进行内存负载监测时,首先会进行内存分配,在系统发现系统当前的空闲内存低于预设内存时,进行内存回收。在进行内存回收时,将内存回收的开始时间记为时间戳1,将内存回收的结束时间记为时间戳2。通过时间戳1和时间戳2可以计算得到单次内存回收持续时间,将单次内存回收持续时间记为STALL_TIME,该STALL_TIME为时间戳2减去时间戳1,在当次内存回收结束后,可以先判断系统当前的空闲内存是否大于预设内存,若系统当前的空闲内存大于或等于预设内存,则确定系统当前的空闲内存充足,进而可以将STALL_TIME设置为0,并结束内存回收;若系统当前的空闲内存小于预设内存,则系统当前的空闲内存不充足,需要继续进行内存回收。
步骤S240:获取预设时间段内CPU的运行时间和空闲时间。
在本申请实施例中,系统在进行任务调度时,可以获取某一时间段内的各个CPU节点的运行时间和空闲时间。其中,时间段可以被设置为任意数值,示例性的,该时间段可以设置为1s。其中,CPU空闲时间主要是由于CPU和I/O设备运行速度不匹配而产生的,而系统为了能够充分利用CPU资源,不允许CPU存在过多的空闲时间,系统一般从利用CPU空闲时间和减少CPU空闲时间两个方面来提出解决方案,其中常用的方法包括多道程序、DMA和I/O通道。
同时,每次进行CPU负载计算有可能导致系统的负载增加,进而影响系统性能,因此可以每间隔预设时间段后获取一次CPU的运行时间和空闲时间,从而可以减少CPU负载计算给系统性能带来的影响。其中,该预设时间段可以预先设置,也可以根据任务不同进行设置。示例性的,该预设时间段可以简单地设置为100ms,也可以根据调度的任务的数量对预设时间段进行设置,比如,若调度的任务的数量大于预设数量阈值,则将预设时间段进行延长;若调度的任务的数量小于或等于预设数量阈值,则将预设时间段进行缩短,使得可以减少CPU负载计算的次数,从而可以减少CPU负载计算对系统带来的影响。
步骤S250:基于所述运行时间和所述空闲时间,确定当前的CPU负载。
在本申请实施例中,系统通过任务调度获得各个CPU节点的运行时间和空闲时间,从而将各个CPU节点的运行时间和空闲时间通过计算处理可以得到当前的CPU负载,计算式如下:CPU负载=运行时间/(空闲时间+运行时间),即该CPU负载的数值由运行时间除以运行时间和空闲时间之和得到。
在通过上述方法获取到当前的CPU负载后,可以通过系统监测该任务是否调度完成,若完成该任务调度,则系统进行下一次的任务调度,并结束此次CPU的负载监测。
示例性的,步骤S240和步骤S250所述的过程可以如图4所示,系统在进行监测CPU负载时,系统通过调度子系统获取一段时间系统CPU运行时间和空闲时间,再根据运行时间和空闲时间计算CPU负载,负载计算完成后再调度下一个任务,最后监测结束。
步骤S260:监测所述内存回收参数是否满足预设参数阈值,若满足,执行步骤S270;若不满足,执行步骤S280。
在本申请实施例中,内存回收参数包括两部分参数,一是内存回收压力,二是CPU负载;预设的参数阈值也包括两部分阈值,一是预设压力阈值,二是预设负载阈值。其中,预设压力阈值对应于内存回收压力,预设负载阈值对应于CPU负载。其中,预设参数阈值可以为一固定数值,也可以根据进程需要的内存大小进行调整,在此不做具体限定。
当系统获取到内存回收压力和CPU负载后,可以将内存回收压力和CPU负载与预设参数阈值进行比较判断,来确定内存回收参数是否满足预设参数阈值,进而来确定是进行内存规整或是进行内存回收。
步骤S270:对系统内存进行内存规整。
作为一种方式,将当前的内存回收参数与预设参数阈值进行比较,满足条件后进行内存规整,包括:若内存回收压力小于或等于压力阈值,且CPU负载小于或等于预设负载阈值,则触发系统进行内存规整。
在本申请实施例中,系统进行内存规整之前需要对内存回收参数与预设的参数阈值进行比较,在满足条件后才能触发系统进行内存规整。由于系统内存低于预设内存,因此系统进入慢速路径,触发获取内存回收压力操作,系统通过获取单次内存回收持续时间来获取内存回收压力,将内存回收压力与预设压力阈值进行比较,若内存回收压力小于或等于预设压力阈值,则系统触发获取CPU负载操作,系统通过获取CPU的运行时间和空闲时间来得到CPU负载,并将CPU负载与预设负载阈值进行比较,若CPU负载小于或等于预设负载阈值,则系统进行内存规整,系统通过页面迁移的机制对可移动页面进行迁移,以达到将离散页面整合成连续页面,将小内存整合成大内存的目的。
步骤S280:进入内存回收。
在本申请实施例中,将内存回收参数与预设参数阈值进行比较,未满足条件则进行内存回收,包括:若内存回收压力大于预设压力阈值,或CPU负载大于预设负载阈值,则内存回收参数不满足预设参数阈值,触发系统进行内存回收。
本申请提供的一种内存管理方法,首先若当前的空闲内存低于预设内存,则开始进行内存回收操作,获取内存回收操作对应的开始时间和结束时间,基于开始时间和结束时间,确定当前的内存回收压力然后获取预设时间段内CPU的运行时间和空闲时间,基于运行时间和空闲时间,确定当前的CPU负载,再监测内存回收参数是否满足预设参数阈值,若内存回收压力小于或等于预设压力阈值,且CPU负载小于或等于预设负载阈值,确定满足预设参数阈值,对系统内存进行内存规整,若内存回收参数未满足预设参数阈值,则进入内存回收。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
请参阅图5,本申请实施例提供了一种内存管理方法,所述方法包括:
步骤S301:若检测到当前的空闲内存低于预设内存,触发获取当前的内存回收参数。
在本申请实施例中,系统检测到当前的空闲内存低于预设内存,内存分配失败,因此系统进入慢速路径,触发获取当前的内存回收参数,包括:获取内存回收压力和CPU负载。其中,内存回收压力由内存回收过程中的单次内存回收持续时间所决定,CPU负载由系统进行任务调度时各个CPU的运行时间和空闲时间所决定。
步骤S302:若当前的空闲内存低于预设内存,则开始进行内存回收操作。
步骤S302具体可以参考上述实施例中的详细解释,故不在本能实施例中进行赘述。
步骤S303:获取所述内存回收操作对应的开始时间和结束时间。
步骤S303具体可以参考上述实施例中的详细解释,故不在本能实施例中进行赘述。
步骤S304:基于所述开始时间和所述结束时间,确定当前的内存回收压力。
步骤S304具体可以参考上述实施例中的详细解释,故不在本能实施例中进行赘述。
步骤S305:获取预设时间段内CPU的运行时间和空闲时间。
步骤S305具体可以参考上述实施例中的详细解释,故不在本能实施例中进行赘述。
步骤S306:基于所述运行时间和所述空闲时间,确定当前的CPU负载。
步骤S306具体可以参考上述实施例中的详细解释,故不在本能实施例中进行赘述。
步骤S307:若所述内存回收压力小于或等于预设压力阈值,且所述CPU负载小于或等于预设负载阈值,确定满足所述预设参数阈值,对系统内存进行内存规整。
步骤S307具体可以参考上述实施例中的详细解释,故不在本能实施例中进行赘述。
步骤S308:若所述内存回收压力大于预设压力阈值,或者所述CPU负载大于预设负载阈值,确定未满足所述预设参数阈值,进入内存回收。
在本申请实施例中,当内存回收压力大于预设压力阈值,或CPU负载大于预设负载阈值时,内存回收压力参数不满足预设参数阈值,系统进入内存回收。
作为另一种方式,若所述内存回收压力小于或等于所述预设压力阈值,且所述CPU负载大于所述预设负载阈值,确定未满足所述预设参数阈值,进入内存回收。
在本申请实施例中,当内存回收压力小于或等于预设压力阈值,并且CPU负载大于预设负载阈值时,内存回收压力参数不满足预设参数阈值,系统进入内存回收。
步骤S309:对进程进行内存分配。
在本申请实施例中,系统通过对系统内存进行内存规整,将小内存整合成连续内存,并将该连续内存分配给申请的任务。
步骤S310:若分配成功,返回内存信息。
在本申请实施例中,系统对已经进行内存规整后的内存进行内存分配处理,包括:若内存规整后得到的连续内存满足申请的任务的所需内存,则系统内存能够进行分配,内存分配成功。在内存分配结束后,系统将任务的内存信息返回给用户查看。其中,任务的内存信息包括任务占用的内存大小,任务在计算机的位置等,在此不做具体限定。
步骤S311:若分配失败,则进入内存回收。
在本申请实施例中,系统对已经进行内存规整后的内存进行内存分配处理,包括:若内存规整后得到的连续内存不满足申请的任务的所需内存,则系统内存不能进行分配,内存分配失败。在内存分配失败后触发内存回收操作,将系统内的可以回收的内存进行回收,从而让系统的内存变大,进而能够满足申请的任务的所需内存。其中,可以回收的内存包括文件映射的页和匿名页。
作为一种方式,由于页面回收总是以cache丢弃,内存swap等为代价的,对系统的性能有一定的不良影响,因此内存回收不是回收得越多越好,而是需要内存达到一种平衡,让系统将内存回收至阈值,回收至该阈值的系统内存既要保证系统运行的性能,又要应付好新的页面分配请求。其中,所述阈值由系统唯一确定。
本申请提供的一种内存管理方法,首先若检测到当前的空闲内存低于预设内存,触发获取当前的内存回收参数,然后若当前的空闲内存低于预设内存,则开始进行内存回收操作,获取所述内存回收操作对应的开始时间和结束时间,基于所述开始时间和所述结束时间,确定当前的内存回收压力,再获取预设时间段内CPU的运行时间和空闲时间,基于所述运行时间和所述空闲时间,确定当前的CPU负载,若所述内存回收压力小于或等于预设压力阈值,且所述CPU负载小于或等于预设负载阈值,确定满足所述预设参数阈值,对系统内存进行内存规整若所述内存回收压力大于预设压力阈值,或者所述CPU负载大于预设负载阈值,确定未满足所述预设参数阈值,进入内存回收;或者,若所述内存回收压力小于或等于所述预设压力阈值,且所述CPU负载大于所述预设负载阈值,确定未满足所述预设参数阈值,进入内存回收,最后对进程进行内存分配,若分配成功,返回内存信息,若分配失败,则进入内存回收。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
请参阅图6,本申请实施例提供了一种内存管理方法,所述方法包括:
步骤S401:进程进入慢速路径。
在本申请实施例中,由于系统内存低于预设内存,从而导致系统的内存分配失败,从而使系统的进程进入慢速路径。
步骤S402:获取内存回收压力。
在本申请实施例中,系统通过内存回收过程中的单次内存回收持续时间来获取内存回收压力,当系统的内存高于预设内存时,将单次内存回收持续时间设置为0。
步骤S403:判断当前内存回收压力是否满足压力阈值,若满足,则执行步骤S404;若不满足,则执行步骤S410。
步骤S404:获取CPU负载。
在本申请实施例中,系统通过在进行任务调度时获取的各个CPU的运行时间和空闲时间来得到CPU负载。
步骤S405:判断当前CPU负载是否满足负载阈值,若满足,则执行步骤S406;若不满足,则执行步骤S410。
步骤S406:进行内存规整。
在本申请实施例中,内核通过页面回收机制将可移动的页面进行迁移,从而将离散的页面整合成连续的页面,将小内存整合成大内存。
步骤S407:重新分配内存。
步骤S408:若内存分配成功,则执行步骤S409;若内存分配失败,则执行步骤S410。
在本申请实施例中,系统通过内存规整后得到的内存大于申请的任务的所需内存,则内存分配成功;若内存规整后得到的内存小于申请的任务的所需内存,则分配失败。
步骤S409:返回内存给用户。
内存分配成功后,将任务的信息返回给用户查看,其中,任务的信息包括占用的内存大小,任务在系统中的位置,在此不做具体限定。
步骤S410:进入内存回收。
在本申请实施例中,当内存回收压力不满足压力阈值,或CPU负载不满足负载阈值,或内存分配失败后,系统会进入内存回收,回收对象包括文件映射的页和匿名页,当系统的内存满足申请的任务的所需内存后,内存回收结束。
本申请提供的一种内存管理方法,首先进入慢速路径,然后获取当前内存回收压力,判断当前内存回收压力是否满足压力阈值,若满足,则获取当前CPU负载,若不满足,则进入内存回收,再判断当前CPU负载是否满足负载阈值,若满足,则进行内存规整,若不满足,则进入内存回收,再重新分配内存,若内存分配成功,则返回内存给用户,若内存分配失败,则进入内存回收。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
请参阅图7,本申请实施例提供了一种内存管理装置500,所述装置包括500包括:
内存回收参数获取单元510,用于获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载。
作为一种方式,内存回收参数获取单元510用于若当前的空闲内存低于预设内存,则开始进行内存回收操作;获取所述内存回收操作对应的开始时间和结束时间。
可选的,内存回收参数获取单元510还用于基于所述开始时间和所述结束时间,确定当前的内存回收压力;获取预设时间段内CPU的运行时间和空闲时间;基于所述运行时间和所述空闲时间,确定当前的CPU负载。
可选的,内存回收参数获取单元510还用于若检测到当前的空闲内存低于预设内存,触发获取当前的内存回收参数。
内存回收参数比较单元520,用于若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。
作为一种方式,内存回收参数比较单元520用于若所述内存回收压力小于或等于预设压力阈值,且所述CPU负载小于或等于预设负载阈值,确定满足所述预设参数阈值,对系统内存进行内存规整;若所述内存回收参数未满足所述预设参数阈值,则进入内存回收。
可选的,内存回收参数比较单元520具体用于若所述内存回收压力大于预设压力阈值,或者所述CPU负载大于预设负载阈值,确定未满足所述预设参数阈值,进入内存回收;或者,若所述内存回收压力小于或等于所述预设压力阈值,且所述CPU负载大于所述预设负载阈值,确定未满足所述预设参数阈值,进入内存回收。
可选的,内存回收参数比较单元520还用于对进程进行内存分配;若分配成功,返回内存信息;若分配失败,则进入内存回收。
需要说明的是,本申请中装置实施例与前述方法实施例是互相对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
下面将结合图8对本申请提供的一种电子设备进行说明。
请参阅图8,基于上述的内存管理方法、装置,本申请实施例还提供了另一种可以执行前述内存管理方式的电子设备600。电子设备600包括相互耦合的一个或多个(图中仅示出一个)处理器602、存储器604以及网络模块606。其中,该存储器604中存储有可以执行前述实施例中内容的程序,而处理器602可以执行该存储器604中存储的程序。
其中,处理器602可以包括一个或者多个处理核。处理器602利用各种接口和线路连接整个电子设备600内的各个部分,通过运行或执行存储在存储器604内的指令、程序、代码集或指令集,以及调用存储在存储器604内的数据,执行服务器600的各种功能和处理数据。可选地,处理器602可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(ProgrammableLogic Array,PLA)中的至少一种硬件形式来实现。处理器602可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器602中,单独通过一块通信芯片进行实现。
存储器604可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器604可用于存储指令、程序、代码、代码集或指令集。存储器604可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备600在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
所述网络模块606用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯,例如和音频播放设备进行通讯。所述网络模块606可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。所述网络模块606可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。例如,网络模块606可以与基站进行信息交互。
请参考图9,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质700中存储有程序代码,所述程序代码可以被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质700可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质700包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质700具有执行上述方法中的任何方法步骤的程序代码710的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码710可以例如以适当形式进行压缩。
本申请实施例提供的一种内存管理方法、装置、电子设备及存储介质。该内存管理方法包括:首先获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载,然后若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。通过上述方法,通过将内存回收压力和CPU负载与预设参数阈值进行比较,在内存回收压力和CPU负载均满足预设参数阈值后再进行内存规整,可以减少提前进入内存规整的次数,从而优化进入内存规整的时机,降低了进程进入慢速路径的概率,提高了系统的性能,进而避免内存规整次数过多带来的恶化效果。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
Claims (11)
1.一种内存管理方法,其特征在于,所述方法包括:
获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载;
若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。
2.根据权利要求1所述的方法,其特征在于,所述内存回收参数满足预设参数阈值,对系统内存进行内存规整,包括:
若所述内存回收压力小于或等于预设压力阈值,且所述CPU负载小于或等于预设负载阈值,确定满足所述预设参数阈值,对系统内存进行内存规整。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述内存回收参数未满足所述预设参数阈值,则进入内存回收。
4.根据权利要求3所述的方法,其特征在于,所述若所述内存回收参数未满足所述预设参数阈值,则进入内存回收,包括:
若所述内存回收压力大于预设压力阈值,或者所述CPU负载大于预设负载阈值,确定未满足所述预设参数阈值,进入内存回收;或者,
若所述内存回收压力小于或等于所述预设压力阈值,且所述CPU负载大于所述预设负载阈值,确定未满足所述预设参数阈值,进入内存回收。
5.根据权利要求1所述的方法,其特征在于,所述获取当前的内存回收参数,包括:
若当前的空闲内存低于预设内存,则开始进行内存回收操作;
获取所述内存回收操作对应的开始时间和结束时间;
基于所述开始时间和所述结束时间,确定当前的内存回收压力。
6.根据权利要求1所述的方法,其特征在于,所述获取当前的内存回收参数,包括:
获取预设时间段内CPU的运行时间和空闲时间;
基于所述运行时间和所述空闲时间,确定当前的CPU负载。
7.根据权利要求1所述的方法,其特征在于,所述若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整之后还包括:
对进程进行内存分配;
若分配成功,返回内存信息;
若分配失败,则进入内存回收。
8.根据权利要求1所述的方法,其特征在于,所述获取当前的内存回收参数之前还包括:
若检测到当前的空闲内存低于预设内存,触发获取当前的内存回收参数。
9.一种内存管理装置,其特征在于,所述装置包括:
内存回收参数获取单元,用于获取当前的内存回收参数,所述内存回收参数包括内存回收压力和CPU负载;
内存回收参数比较单元,用于若所述内存回收参数满足预设参数阈值,对系统内存进行内存规整。
10.一种电子设备,其特征在于,包括一个或多个处理器以及存储器,一个或多个程序被存储在所述存储器中并被配置为由一个或多个处理器执行权利要求1-8任一所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序代码,所述程序代码包括用于执行如权利要求1-8任一权利要求所述的方法的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211003146.2A CN115421909A (zh) | 2022-08-19 | 2022-08-19 | 内存管理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211003146.2A CN115421909A (zh) | 2022-08-19 | 2022-08-19 | 内存管理方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115421909A true CN115421909A (zh) | 2022-12-02 |
Family
ID=84197754
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211003146.2A Pending CN115421909A (zh) | 2022-08-19 | 2022-08-19 | 内存管理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115421909A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116225976A (zh) * | 2023-05-05 | 2023-06-06 | 麒麟软件有限公司 | 一种Linux操作系统下的水位线自调整方法及系统 |
CN116661988A (zh) * | 2022-12-29 | 2023-08-29 | 荣耀终端有限公司 | 内存的规整方法、电子设备及可读存储介质 |
-
2022
- 2022-08-19 CN CN202211003146.2A patent/CN115421909A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116661988A (zh) * | 2022-12-29 | 2023-08-29 | 荣耀终端有限公司 | 内存的规整方法、电子设备及可读存储介质 |
CN116225976A (zh) * | 2023-05-05 | 2023-06-06 | 麒麟软件有限公司 | 一种Linux操作系统下的水位线自调整方法及系统 |
CN116225976B (zh) * | 2023-05-05 | 2023-08-08 | 麒麟软件有限公司 | 一种Linux操作系统下的水位线自调整方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10990540B2 (en) | Memory management method and apparatus | |
US20240054079A1 (en) | Memory Management Method and Apparatus, Electronic Device, and Computer-Readable Storage Medium | |
CN110888746B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN115421909A (zh) | 内存管理方法、装置、电子设备及存储介质 | |
CN111078406B (zh) | 内存管理方法、装置、存储介质及电子设备 | |
CN110764906B (zh) | 内存回收处理方法、装置、电子设备以及存储介质 | |
CN111352861B (zh) | 内存压缩方法、装置及电子设备 | |
CN114096953A (zh) | 内存管理方法、装置、电子设备和计算机可读介质 | |
KR20160132432A (ko) | 멀티 프로세스 애플리케이션들을 위한 동적 자원 관리 | |
CN110727605B (zh) | 内存回收方法、装置以及电子设备 | |
US20190227918A1 (en) | Method for allocating memory resources, chip and non-transitory readable medium | |
CN110704189A (zh) | 内存回收方法、装置以及电子设备 | |
CN110727607A (zh) | 内存回收方法、装置以及电子设备 | |
CN111522659A (zh) | 一种空间使用方法和装置 | |
CN115421907A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN111984413A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN115587049A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN118093150A (zh) | 内存管理方法、计算机设备及存储介质 | |
CN115934276A (zh) | 内存管理方法、装置及电子设备 | |
CN112817769B (zh) | 游戏资源动态缓存方法、装置、存储介质与电子设备 | |
CN115617515A (zh) | 智能物联网操作系统的内存分配方法、装置和存储介质 | |
CN116610648A (zh) | 日志保存方法、装置、电子设备及存储介质 | |
CN111078405B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111782362A (zh) | 一种消息任务调度方法、装置及电子设备 | |
CN111414254A (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 |