CN116185642B - 容器内存的优化方法及装置、存储介质、电子装置 - Google Patents
容器内存的优化方法及装置、存储介质、电子装置 Download PDFInfo
- Publication number
- CN116185642B CN116185642B CN202310448670.9A CN202310448670A CN116185642B CN 116185642 B CN116185642 B CN 116185642B CN 202310448670 A CN202310448670 A CN 202310448670A CN 116185642 B CN116185642 B CN 116185642B
- Authority
- CN
- China
- Prior art keywords
- memory
- container
- target
- priority
- target container
- 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.)
- Active
Links
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/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3055—Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种容器内存的优化方法及装置、存储介质、电子装置,所述方法包括:监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***;根据所述内存状态触发生成所述目标容器的内存释放指令;响应所述内存释放指令,释放所述目标容器的占用内存。本方案解决了相关技术在宿主***中优化内存时容器内存隔离的技术问题,提高了内存管理的灵活性和宿主***的稳定性。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种容器内存的优化方法及装置、存储介质、电子装置。
背景技术
相关技术中,随着云游戏、云手机等云应用领域的发展,在Android宿主***中使用容器化管理实现更高的资源使用效率已经逐渐成为新的技术方向。但Android***本身并非为容器化设计,其中许多***服务并未对容器化方案做支持,导致在多容器环境下运行出现错误。Android***的低内存管理服务(low memory killer daemon,lmkd)就是其中之一。
相关技术中的lmkd不支持容器隔离。宿主***(如Android***)本身使用lmkd***服务进行低内存状态下的优化工作,主要包括按照一定规则删除进程释放可用内存。lmkd在设计时仅针对整个宿主Android***进行低内存检测与优化,无法适应多容器***环境。lmkd删除进程的算法功能单一,lmkd进行低内存检测并进行优化时,会按照优先级遍历ActivityManagerService(活动管理器服务)中维护的进程列表,优先删除(终止)低优先级的进程来释放内存,这种方式相对不灵活。实际的使用环境下,经常需要对某些应用进程或***进程进行保活或适当调整优先级。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
发明内容
本发明实施例提供了一种容器内存的优化方法及装置、存储介质、电子装置。
根据本发明的一个实施例,提供了一种容器内存的优化方法,包括:监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***;根据所述内存状态触发生成所述目标容器的内存释放指令;响应所述内存释放指令,释放所述目标容器的占用内存。
可选的,监测操作***中目标容器的内存状态包括:查找所述目标容器所在的目标控制组;调用所述目标控制组的vmpressure函数监听所述目标控制组中的vmpressure事件,其中,所述vmpressure事件用于指示所述目标控制组的内存回收状态。
可选的,监测操作***中目标容器的内存状态包括:查找所述目标容器所在的目标控制组;调用所述目标控制组的压力失速信息psi函数监听所述目标控制组中的psi事件,其中,所述psi事件用于指示所述目标控制组的内存申请状态。
可选的,查找所述目标容器所在的目标控制组包括:读取所述目标容器的命名空间;查找与所述命名空间匹配的目标控制组。
可选的,释放所述目标容器的占用内存包括:判断低内存管理lmkd进程是否运行在所述目标容器的容器***中;若lmkd进程运行在所述容器***中,遍历所述容器***的proc目录中的所有进程,对每个进程执行以下步骤,直到proc目录中的所有进程遍历完成:判断当前的第一进程的优先级是否低于所述lmkd进程的释放优先级阈值;若第一进程的优先级低于释放优先级阈值,在所述容器***中删除所述第一进程。
可选的,释放所述目标容器的占用内存包括:判断lmkd进程是否运行在所述目标容器的容器***中;若lmkd进程运行在所述容器***中,遍历所述容器***中的所有进程,对每个进程执行以下步骤,直到所有进程遍历完成:判断当前的第二进程是否在所述目标容器的偏好应用集合中;若待删除的第二进程在所述目标容器的偏好应用表中,从所述偏好应用表的配置文件中读取所述第二进程的存活优先级;判断所述存活优先级是否低于所述lmkd进程的释放优先级阈值;若所述存活优先级低于所述释放优先级阈值,删除所述第二进程。
可选的,在从所述偏好应用表的配置文件中读取所述第二进程的存活优先级之前,所述方法还包括:基于用户指令配置所述第二进程的进程标识和存活优先级,并采用所述存活优先级覆盖所述第二进程的***默认优先级;以所述第二进程的进程标识为键,所述存活优先级为值,生成所述第二进程的键值对;将所述键值对添加至所述配置文件。
根据本发明的另一个实施例,提供了一种容器内存的优化装置,包括:监测模块,用于监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***;生成模块,用于根据所述内存状态触发生成所述目标容器的内存释放指令;释放模块,用于响应所述内存释放指令,释放所述目标容器的占用内存。
可选的,所述监测模块包括:查找单元,用于查找所述目标容器所在的目标控制组;第一调用单元,用于调用所述目标控制组的vmpressure函数监听所述目标控制组中的vmpressure事件,其中,所述vmpressure事件用于指示所述目标控制组的内存回收状态。
可选的,所述监测模块包括:查找单元,用于查找所述目标容器所在的目标控制组;第二调用单元,用于调用所述目标控制组的压力失速信息psi函数监听所述目标控制组中的psi事件,其中,所述psi事件用于指示所述目标控制组的内存申请状态。
可选的,所述查找单元包括:读取子单元,用于读取所述目标容器的命名空间;查找子单元,用于查找与所述命名空间匹配的目标控制组。
可选的,所述释放模块包括:判断单元,用于判断低内存管理lmkd进程是否运行在所述目标容器的容器***中;第一遍历单元,用于若lmkd进程运行在所述容器***中,遍历所述容器***的proc目录中的所有进程,对每个进程执行以下步骤,直到proc目录中的所有进程遍历完成:判断当前的第一进程的优先级是否低于所述lmkd进程的释放优先级阈值;若第一进程的优先级低于释放优先级阈值,在所述容器***中删除所述第一进程。
可选的,所述释放模块包括:判断单元,用于判断lmkd进程是否运行在所述目标容器的容器***中;第二遍历单元,用于若lmkd进程运行在所述容器***中,遍历所述容器***中的所有进程,对每个进程执行以下步骤,直到所有进程遍历完成:判断当前的第二进程是否在所述目标容器的偏好应用集合中;若待删除的第二进程在所述目标容器的偏好应用表中,从所述偏好应用表的配置文件中读取所述第二进程的存活优先级;判断所述存活优先级是否低于所述lmkd进程的释放优先级阈值;若所述存活优先级低于所述释放优先级阈值,删除所述第二进程。
可选的,所述释放模块还包括:配置单元,用于在所述第二遍历单元从所述偏好应用表的配置文件中读取所述第二进程的存活优先级之前,基于用户指令配置所述第二进程的进程标识和存活优先级,并采用所述存活优先级覆盖所述第二进程的***默认优先级;生成单元,用于以所述第二进程的进程标识为键,所述存活优先级为值,生成所述第二进程的键值对;添加单元,用于将所述键值对添加至所述配置文件。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,监测操作***中目标容器的内存状态,其中,操作***是目标容器的宿主***,根据内存状态触发生成目标容器的内存释放指令,响应内存释放指令,释放目标容器的占用内存,通过监测操作***中目标容器的内存状态,并对目标容器的占用内存进行针对性释放,可以以宿主***中的容器为单位进行内存管理,可以在多容器运行的操作***中进行针对性内存释放,提高内存优化的粒度,解决了相关技术在宿主***中优化内存时容器内存隔离的技术问题,提高了内存管理的灵活性和宿主***的稳定性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种容器内存的优化计算机的硬件结构框图;
图2是根据本发明实施例的一种容器内存的优化方法的流程示意图;
图3是本发明实施例中宿主***和容器的示意图;
图4是根据本发明实施例的一种容器内存的优化装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
本申请实施例一所提供的方法实施例可以在手机、平板、服务器、计算机或者类似的电子终端中执行。以运行在计算机上为例,图1是本发明实施例的一种容器内存的优化计算机的硬件结构框图。如图1所示,计算机可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述计算机还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机的结构造成限定。例如,计算机还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的一种容器内存的优化方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。在本实施例中,处理器104用于响应人机交互指令和游戏策略,控制目标虚拟角色执行指定操作以完成游戏任务。存储器104用于存储电子游戏的程序脚本,配置信息,虚拟角色的声音资源信息等。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
可选的,输入输出设备108还包括人机交互屏幕用于通过人机交互接口获取人机交互指令,还用于呈现虚拟场景中的画面;
在本实施例中提供了一种容器内存的优化方法,图2是根据本发明实施例的一种容器内存的优化方法的流程示意图,如图2所示,该流程包括如下步骤:
步骤S202,监测操作***中目标容器的内存状态,其中,操作***是目标容器的宿主***;
宿主***运行在宿主主机上,图3是本发明实施例中宿主***和容器的示意图,宿主主机的宿主***的内存容量为8GB,在宿主主机的操作***上创建了2个容器 (每个容器有4个进程),每个容器最多只能使用对应分配 2GB 的内存,容器之间相互内存隔离,如果使用超过 2GB 的内存,则只能重新配置容器的内存。
本实施例的操作***可以是安卓***,LINUX***等可以运行容器(Docker)的***,在此以安卓***为例进行说明。
本实施例的内存状态用于表征目标容器的内存占用状态,如内存占用率,内存占用容量,内存剩余容量等。
步骤S204,根据内存状态触发生成目标容器的内存释放指令;
可选的,在内存状态表征目标容器的内存压力较大(如高于阈值,预设压力等级)时,触发生成目标容器的内存释放指令。
步骤S206,响应内存释放指令,释放目标容器的占用内存;
通过上述步骤,监测操作***中目标容器的内存状态,其中,操作***是目标容器的宿主***,根据内存状态触发生成目标容器的内存释放指令,响应内存释放指令,释放目标容器的占用内存,通过监测操作***中目标容器的内存状态,并对目标容器的占用内存进行针对性释放,可以以宿主***中的容器为单位进行内存管理,可以在多容器运行的操作***中进行针对性内存释放,提高内存优化的粒度,解决了相关技术在宿主***中优化内存时容器内存隔离的技术问题,提高了内存管理的灵活性和宿主***的稳定性。
在Android等操作***中,使用lmkd***服务检测整个***的内存使用状况,并在内存紧张时对内存进行释放。这种释放的方式通常是删除低优先级的进程来实现。lmkd作为***服务,在***启动阶段会进行启动并初始化。在Android***中,采用用户态的lmkd。在lmkd初始化时,会根据***属性配置,选择使用不同的低内存检测机制,该机制用来检测***出现的内存紧张情况,从而触发内存优化(删除进程/终止进程)动作。本实施例以Android中支持的两种低内存检测机制vmpressure机制和psi(pressure stallinformation,压力失速信息)机制进行说明。
在本实施例的一个实施方式中,宿主***采用vmpressure机制,监测操作***中目标容器的内存状态包括:
S11,查找目标容器所在的目标控制组;
S12,调用目标控制组的vmpressure函数监听目标控制组中的vmpressure事件,其中,vmpressure事件用于指示目标控制组的内存回收状态。
本实施例通过内核的cgroup(control group,控制组)机制中的memory子***的event_control实现。首先lmkd进程在该机制已开启的前提下,向event_control中注册不同级别的内存事件(例如LOW(低)、MEDIUM(中等)、CRITICAL(临界)),然后监听eventfd来接收来自内核的低内存事件。
vmpressure机制在内核中尝试回收内存页,如果回收时出现失败的内存页越多,说明内存的压力越大,通过监听回收失败内存页的数量或者比例来作为vmpressure事件。根据压力不同,分为low、medium、critical三个压力等级,并通过eventfd通知给用户态。
相关技术在lmkd的实现中,并未考虑多容器的场景,因此会出现整个***内存压力大时,会将该事件同时通知到宿主***和所有容器***中的lmkd进程,导致宿主***和所有容器***都进行删除进程动作,实际上由于容器的内存隔离限额,可能仅是其中一些容器内存紧张,却触发其他内存相对充裕的容器也删除进程释放内存,导致不合理的运行结果出现。
本实施例在vmpressure进程初始化阶段,通过获取当前容器的namespace,找到对应的cgroup控制组,并精准在该组中进行vmpressure事件的注册。在后续监听过程中,也精准监听该cgroup组中的vmpressure事件,实现了针对单个容器的精准监测。
采用本实施方式的方案,实现了宿主***和各个容器***之间互不干扰,容器关注自己命名空间中的vmpressure低内存事件,防止A容器内存紧张,却触发其他内存相对充裕的B容器也删除进程释放内存,提高了宿主设备的稳定性。
在上述实施方式中,vmpressure机制仅体现了回收内存时的压力,无法准确体现申请内存时的压力,事件上报可能不够准确。Android的一些版本中引入了psi机制来检测申请内存时出现的压力。
在本实施例的另一个实施方式中,宿主***采用psi机制,监测操作***中目标容器的内存状态包括:
S21,查找目标容器所在的目标控制组;
S22,调用所述目标控制组的压力失速信息psi函数监听目标控制组中的psi事件,其中,psi事件用于指示目标控制组的内存申请状态。
可选的,查找目标容器所在的目标控制组包括:读取目标容器的命名空间;查找与命名空间匹配的目标控制组。
本实施例采用psi机制的原理是统计最近一段时间内因为等待申请内存而阻塞的任务占比,它统计两个指标,分别是某一个任务(some)因申请内存阻塞的占比,和所有任务(full)因申请内存阻塞的占比。每个指标又有三个统计时间段,如分别是10秒、60秒和300秒。
内存的psi数值可以通过/proc/pressure/memory查看,例如:
# cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=304985781
full avg10=0.00 avg60=0.00 avg300=0.00 total=112265598
其中第二行统计的在最近10秒、60秒、300秒内有某个任务因申请内存而阻塞的时间占此段总时间的占比,total指总时间。第三行统计的是所有任务都因内存而阻塞的时间占此段总时间的占比。
在lmkd的实现中,通过向psi注册low、medium、critical三个内存压力等级,并监听psi的事件上报来检测低内存情况。lmkd中对三个压力等级的定义是:
low:平均每1000ms中某个任务因申请内存而阻塞的时间达到70ms;
medium:平均每1000ms中某个任务因申请内存而阻塞的时间达到100ms;
critical:平均每1000ms中所有任务因申请内存而阻塞的时间达到70ms。
相关技术中,Android***的lmkd进程对psi机制的使用,没有考虑到多容器的场景,也会出现宿主***和所有容器***发生的所有因申请内存阻塞任务的情况都一起进行统计,并且一起触发删除进程的动作,并不合理。
本实施例优化了lmkd进程的实现逻辑,对宿主和各个容器***的psi统计进行隔离。psi仅支持cgroupv2机制,不支持cgroupv1,但Android***仍然使用cgroupv1进行内存资源限制,需要在***启动阶段,禁用cgroupv1的memory子***,并创建对应的cgroupv2的控制组并添加memory子***,从而增加对内存psi的分组隔离。
本实施方式在lmkd进程初始化阶段对psi进程注册初始化,通过获取当前容器的namespace,找到对应的cgroup组,并精准在该组中进行psi事件的注册。在后续监听过程中,也精准监听该cgroup组中的psi事件。
采用本实施例的方案,实现了宿主***和各个容器***之间互不干扰,仅关注自己命名空间中的psi低内存事件,防止A容器内存紧张,却触发其他内存相对充裕的B容器也删除进程释放内存,提高了宿主设备的稳定性。
在一个实施场景中,释放目标容器的占用内存包括:判断低内存管理lmkd进程是否运行在目标容器的容器***中;若lmkd进程运行在容器***中,遍历容器***的proc目录中的所有进程,对每个进程执行以下步骤,直到proc目录中的所有进程遍历完成:判断当前的第一进程的优先级是否低于lmkd进程的释放优先级阈值;若第一进程的优先级低于释放优先级阈值,在容器***中删除第一进程。
相关技术的lmkd进程在检测到低内存事件后,会启动内存释放流程,按照优先级从低到高(oom_score_adj值越小代表优先级越高)删除进程来释放内存。lmkd中维护了一个进程列表,该进程列表是由活动管理器服务(AMS,ActivityManagerService)通过socket进行更新的,即lmkd只会释放通过AMS管理的应用进程,对于一些非AMS管理的进程无法释放内存。
本实施例的方案对比进行了优化,实现了深度内存释放,在每次触发释放内存流程时,如果本次内存压力较大,说明要释放的优先级较高(min_score_adj数值较小),并且本次没有成功通过删除AMS管理的进程来释放内存时,触发本实施例的深度释放流程。
深度释放流程首先判断当前lmkd进程是否运行于宿主***,如果当前lmkd进程的namespace与内核中初始namespace值相等,说明lmkd进程当前处于宿主***。
遍历/proc目录(该目录存储了操作***中运行的所有进程,包括操作***挂载的进程和容器挂载的进程)中的所有进程,对每个遍历进程进行判断操作:
如果当前lmkd进程处于宿主***,则判断当前遍历进程的namespace是否与内核中初始namespace值相等,如果不相等,说明当前遍历的进程属于容器,不进行操作;反之说明当前遍历进程属于宿主***,可以按照优先级信息进行选择性释放。
如果当前lmkd进程处于容器***,或者当前lmkd进程处于宿主***并且当前遍历的进程也属于宿主***,即当前遍历进程与lmkd进程处于同一个namespace,那么判断当前遍历进程的优先级是否低于当前要释放的最高优先级(oom_score_adj> min_score_adj),如果成立,说明该进程优先级相对较低,需要在本次深度释放中被删除,反之跳过当前遍历进程继续遍历后续进程。
采用本实施场景的方案,能够释放一些低优先级的***进程以及其他非AMS管理的进程(例如一些root用户通过root权限启动的脚本或本地程序,一些通过adb方式启动的程序等)所占用的内存,为***高优先级进程提供更多可用内存,提高了内存的释放程度。
在另一个实施场景中,释放目标容器的占用内存包括:判断lmkd进程是否运行在目标容器的容器***中;若lmkd进程运行在容器***中,遍历容器***中的所有进程,对每个进程执行以下步骤,直到所有进程遍历完成:判断当前的第二进程是否在目标容器的偏好应用集合中;若待删除的第二进程在目标容器的偏好应用表中,从偏好应用表的配置文件中读取第二进程的存活优先级;判断存活优先级是否低于lmkd进程的释放优先级阈值;若存活优先级低于释放优先级阈值,删除第二进程。
可选的,在从偏好应用表的配置文件中读取第二进程的存活优先级之前,还包括:基于用户指令配置第二进程的进程标识和存活优先级,并采用存活优先级覆盖第二进程的***默认优先级;以第二进程的进程标识为键,存活优先级为值,生成第二进程的键值对;将键值对添加至配置文件。
本实施例的lmkd进程在检测到低内存事件后,释放内存过程中会对所有维护的应用进程进行操作,因此一切应用进程都有被删除的可能性。在实际场景中,为了灵活性,有需要保活某些应用或提高某些应用存活可能性的需求。对于这类情况,本实施例提供了一种lmkd的偏好机制,将偏好应用写入偏好应用配置文件。数据格式可以定义如下:每行定义一个偏好应用的键值对,键为偏好应用进程名,值为该偏好应用对应的min_score_adj值(对应存活优先级),代表仅当本次lmkd进程释放内存的min_score_adj(对应lmkd进程的释放优先级阈值)低于此配置的min_score_adj值时,即需要释放的优先级高于配置文件中配置的该偏好应用配置的优先级时,才释放该偏好应用。
Lmkd进程可以定时更新偏好应用的配置文件中的内容到偏好应用表中,实现配置热加载和实时生效。用户可以实时更新配置文件,如进行增删修改偏好应用的名单,调整某个偏好应用的存活优先级等。
Lmkd进程在释放内存中的进程时,会判断当前要释放的进程名是否在偏好应用表中,如果在的话,比较lmkd进程当前释放的min_score_adj与偏好应用表中的min_score_adj,仅当lmkd进程当前释放的min_score_adj低于偏好应用表中的min_score_adj值时,删除该进程释放内存。如果需要彻底保活应用,将偏好应用配置文件中该应用的min_score_adj值配置非常低(如-1000)即可。
采用本实施场景的方案,实现了对进程的灵活配置,在释放内存时,可以对偏好应用可以灵活保护,防止对重要进程的误删除,提高了***的灵活性。
本实施例的方案提供了一种改进的lmkd实现方式,能够支持容器隔离的低内存检测机制。还提供了一种改进的lmkd释放内存的方式,能够额外检索非AMS维护的app进程,实现深度内存释放。能够实现删除进程过程中的白名单机制,提升偏好进程存活的几率,提高灵活性。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本实施例中还提供了一种容器内存的优化装置,用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图4是根据本发明实施例的一种容器内存的优化装置的结构框图,如图4所示,该装置包括:监测模块40,生成模块42,释放模块44,其中,
监测模块40,用于监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***;
生成模块42,用于根据所述内存状态触发生成所述目标容器的内存释放指令;
释放模块44,用于响应所述内存释放指令,释放所述目标容器的占用内存。
可选的,所述监测模块包括:查找单元,用于查找所述目标容器所在的目标控制组;第一调用单元,用于调用所述目标控制组的vmpressure函数监听所述目标控制组中的vmpressure事件,其中,所述vmpressure事件用于指示所述目标控制组的内存回收状态。
可选的,所述监测模块包括:查找单元,用于查找所述目标容器所在的目标控制组;第二调用单元,用于调用所述目标控制组的压力失速信息psi函数监听所述目标控制组中的psi事件,其中,所述psi事件用于指示所述目标控制组的内存申请状态。
可选的,所述查找单元包括:读取子单元,用于读取所述目标容器的命名空间;查找子单元,用于查找与所述命名空间匹配的目标控制组。
可选的,所述释放模块包括:判断单元,用于判断低内存管理lmkd进程是否运行在所述目标容器的容器***中;第一遍历单元,用于若lmkd进程运行在所述容器***中,遍历所述容器***的proc目录中的所有进程,对每个进程执行以下步骤,直到proc目录中的所有进程遍历完成:判断当前的第一进程的优先级是否低于所述lmkd进程的释放优先级阈值;若第一进程的优先级低于释放优先级阈值,在所述容器***中删除所述第一进程。
可选的,所述释放模块包括:判断单元,用于判断lmkd进程是否运行在所述目标容器的容器***中;第二遍历单元,用于若lmkd进程运行在所述容器***中,遍历所述容器***中的所有进程,对每个进程执行以下步骤,直到所有进程遍历完成:判断当前的第二进程是否在所述目标容器的偏好应用集合中;若待删除的第二进程在所述目标容器的偏好应用表中,从所述偏好应用表的配置文件中读取所述第二进程的存活优先级;判断所述存活优先级是否低于所述lmkd进程的释放优先级阈值;若所述存活优先级低于所述释放优先级阈值,删除所述第二进程。
可选的,所述释放模块还包括:配置单元,用于在所述第二遍历单元从所述偏好应用表的配置文件中读取所述第二进程的存活优先级之前,基于用户指令配置所述第二进程的进程标识和存活优先级,并采用所述存活优先级覆盖所述第二进程的***默认优先级;生成单元,用于以所述第二进程的进程标识为键,所述存活优先级为值,生成所述第二进程的键值对;添加单元,用于将所述键值对添加至所述配置文件。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***;
S2,根据所述内存状态触发生成所述目标容器的内存释放指令;
S3,响应所述内存释放指令,释放所述目标容器的占用内存。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***;
S2,根据所述内存状态触发生成所述目标容器的内存释放指令;
S3,响应所述内存释放指令,释放所述目标容器的占用内存。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (6)
1.一种容器内存的优化方法,其特征在于,包括:
监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***,内存状态用于表征目标容器的内存压力;
根据所述内存状态触发生成所述目标容器的内存释放指令,其中,在内存状态表征目标容器的内存压力高于阈值或预设压力等级时,触发生成目标容器的内存释放指令;
响应所述内存释放指令,释放所述目标容器的占用内存,其中,释放所述目标容器的占用内存包括:判断lmkd进程是否运行在所述目标容器的容器***中;若lmkd进程运行在所述容器***中,遍历所述容器***中的所有进程,对每个进程执行以下步骤,直到所有进程遍历完成:判断当前的第二进程是否在所述目标容器的偏好应用表中;若待删除的第二进程在所述目标容器的偏好应用表中,从所述偏好应用表的配置文件中读取所述第二进程的存活优先级;判断所述存活优先级是否低于所述lmkd进程的释放优先级阈值;若所述存活优先级低于所述释放优先级阈值,删除所述第二进程,在从所述偏好应用表的配置文件中读取所述第二进程的存活优先级之前,所述方法还包括:基于用户指令配置所述第二进程的进程标识和存活优先级,并采用所述存活优先级覆盖所述第二进程的***默认优先级;以所述第二进程的进程标识为键,所述存活优先级为值,生成所述第二进程的键值对;将所述键值对添加至所述配置文件;
其中,监测操作***中目标容器的内存状态包括:查找所述目标容器所在的目标控制组;调用所述目标控制组的vmpressure函数监听所述目标控制组中的vmpressure事件,其中,所述vmpressure事件用于指示所述目标控制组的内存回收状态;和/或,监测操作***中目标容器的内存状态包括:查找所述目标容器所在的目标控制组;调用所述目标控制组的压力失速信息psi函数监听所述目标控制组中的psi事件,其中,所述psi事件用于指示所述目标控制组的内存申请状态。
2.根据权利要求1所述的方法,其特征在于,查找所述目标容器所在的目标控制组包括:
读取所述目标容器的命名空间;
查找与所述命名空间匹配的目标控制组。
3.根据权利要求1所述的方法,其特征在于,释放所述目标容器的占用内存包括:
判断低内存管理lmkd进程是否运行在所述目标容器的容器***中;
若lmkd进程运行在所述容器***中,遍历所述容器***的proc目录中的所有进程,对每个进程执行以下步骤,直到proc目录中的所有进程遍历完成:判断当前的第一进程的优先级是否低于所述lmkd进程的释放优先级阈值;若第一进程的优先级低于释放优先级阈值,在所述容器***中删除所述第一进程。
4.一种容器内存的优化装置,其特征在于,包括:
监测模块,用于监测操作***中目标容器的内存状态,其中,所述操作***是所述目标容器的宿主***,内存状态用于表征目标容器的内存压力;
生成模块,用于根据所述内存状态触发生成所述目标容器的内存释放指令,其中,在内存状态表征目标容器的内存压力高于阈值或预设压力等级时,触发生成目标容器的内存释放指令;
释放模块,用于响应所述内存释放指令,释放所述目标容器的占用内存,其中,所述释放模块包括:判断单元,用于判断lmkd进程是否运行在所述目标容器的容器***中;第二遍历单元,用于若lmkd进程运行在所述容器***中,遍历所述容器***中的所有进程,对每个进程执行以下步骤,直到所有进程遍历完成:判断当前的第二进程是否在所述目标容器的偏好应用表中;若待删除的第二进程在所述目标容器的偏好应用表中,从所述偏好应用表的配置文件中读取所述第二进程的存活优先级;判断所述存活优先级是否低于所述lmkd进程的释放优先级阈值;若所述存活优先级低于所述释放优先级阈值,删除所述第二进程,所述释放模块还包括:配置单元,用于在所述第二遍历单元从所述偏好应用表的配置文件中读取所述第二进程的存活优先级之前,基于用户指令配置所述第二进程的进程标识和存活优先级,并采用所述存活优先级覆盖所述第二进程的***默认优先级;生成单元,用于以所述第二进程的进程标识为键,所述存活优先级为值,生成所述第二进程的键值对;添加单元,用于将所述键值对添加至所述配置文件;
其中,所述监测模块包括:查找单元,用于查找所述目标容器所在的目标控制组;第一调用单元,用于调用所述目标控制组的vmpressure函数监听所述目标控制组中的vmpressure事件,其中,所述vmpressure事件用于指示所述目标控制组的内存回收状态;和/或,所述监测模块包括:查找单元,用于查找所述目标容器所在的目标控制组;第二调用单元,用于调用所述目标控制组的压力失速信息psi函数监听所述目标控制组中的psi事件,其中,所述psi事件用于指示所述目标控制组的内存申请状态。
5.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至3任一项中所述的方法。
6.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至3任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310448670.9A CN116185642B (zh) | 2023-04-24 | 2023-04-24 | 容器内存的优化方法及装置、存储介质、电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310448670.9A CN116185642B (zh) | 2023-04-24 | 2023-04-24 | 容器内存的优化方法及装置、存储介质、电子装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116185642A CN116185642A (zh) | 2023-05-30 |
CN116185642B true CN116185642B (zh) | 2023-07-18 |
Family
ID=86449297
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310448670.9A Active CN116185642B (zh) | 2023-04-24 | 2023-04-24 | 容器内存的优化方法及装置、存储介质、电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116185642B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106878042A (zh) * | 2015-12-18 | 2017-06-20 | 北京奇虎科技有限公司 | 基于sla的容器资源调度方法和*** |
US10216512B1 (en) * | 2016-09-29 | 2019-02-26 | Amazon Technologies, Inc. | Managed multi-container builds |
CN111324423A (zh) * | 2020-03-03 | 2020-06-23 | 腾讯科技(深圳)有限公司 | 容器内进程的监控方法、装置、存储介质和计算机设备 |
CN114020407A (zh) * | 2021-10-28 | 2022-02-08 | 济南浪潮数据技术有限公司 | 一种容器管理集群容器组调度优化方法、装置、设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107220076B (zh) * | 2016-09-27 | 2018-10-30 | 华为技术有限公司 | 一种内存回收方法及装置 |
CN108121605B (zh) * | 2017-12-31 | 2021-11-16 | 武汉烽火云创软件技术有限公司 | 一种基于yarn的cgroup内存控制优化方法及*** |
US11792216B2 (en) * | 2018-06-26 | 2023-10-17 | Suse Llc | Application layer data protection for containers in a containerization environment |
US11900173B2 (en) * | 2021-05-18 | 2024-02-13 | Kyndryl, Inc. | Container runtime optimization |
CN113656182A (zh) * | 2021-08-23 | 2021-11-16 | 北京沃东天骏信息技术有限公司 | 一种内存伸缩管理方法、装置、电子设备以及存储介质 |
CN115756847A (zh) * | 2022-11-18 | 2023-03-07 | ***股份有限公司 | Epc内存资源管理***、方法、装置、物理机及介质 |
-
2023
- 2023-04-24 CN CN202310448670.9A patent/CN116185642B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106878042A (zh) * | 2015-12-18 | 2017-06-20 | 北京奇虎科技有限公司 | 基于sla的容器资源调度方法和*** |
US10216512B1 (en) * | 2016-09-29 | 2019-02-26 | Amazon Technologies, Inc. | Managed multi-container builds |
CN111324423A (zh) * | 2020-03-03 | 2020-06-23 | 腾讯科技(深圳)有限公司 | 容器内进程的监控方法、装置、存储介质和计算机设备 |
CN114020407A (zh) * | 2021-10-28 | 2022-02-08 | 济南浪潮数据技术有限公司 | 一种容器管理集群容器组调度优化方法、装置、设备 |
Also Published As
Publication number | Publication date |
---|---|
CN116185642A (zh) | 2023-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111464355B (zh) | Kubernetes容器集群的伸缩容控制方法、装置和网络设备 | |
CN108683720B (zh) | 一种容器集群服务配置方法及装置 | |
CN105656714B (zh) | 移动设备的数据采集上报方法和装置 | |
CN111555963B (zh) | 消息推送方法、装置、电子设备及存储介质 | |
KR101781339B1 (ko) | 클라이언트를 갱신하기 위한 방법 및 디바이스 | |
CN103729300B (zh) | 非易失内存的管理方法和相关装置 | |
CN111538563A (zh) | 一种对Kubernetes的事件分析方法及装置 | |
CN113656142B (zh) | 基于容器组pod的处理方法及相关***、存储介质 | |
CN112016030B (zh) | 消息推送的方法、装置、服务器和计算机存储介质 | |
CN112230847B (zh) | 一种监控K8s存储卷的方法、***、终端及存储介质 | |
CN109597837B (zh) | 时序数据的存储方法、查询方法及相关设备 | |
CN109688094B (zh) | 基于网络安全的可疑ip配置方法、装置、设备及存储介质 | |
CN115794549A (zh) | 一种应用程序占用资源管控方法、装置及介质 | |
CN107155403B (zh) | 一种生命周期事件的处理方法及vnfm | |
CN114070755B (zh) | 虚拟机网络流量确定方法、装置、电子设备和存储介质 | |
CN116185642B (zh) | 容器内存的优化方法及装置、存储介质、电子装置 | |
CN110750350B (zh) | 一种大资源调度方法、***、装置及可读存储介质 | |
CN106156210B (zh) | 一种确定应用标识匹配列表的方法和装置 | |
US20170149893A1 (en) | Metadata server, network device and automatic resource management method | |
CN110543357B (zh) | 管理应用程序对象的方法,相关装置及*** | |
CN104657240B (zh) | 多内核操作***的失效控制方法及装置 | |
CN112989323B (zh) | 进程检测方法、装置、终端及存储介质 | |
CN107819595B (zh) | 一种网络切片管理装置 | |
CN102780570A (zh) | 一种云计算设备管理的实现方法及*** | |
CN114585035A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |