将内存耗尽处理流程卸载到用户空间的方法和装置的制造方法

文档序号:10654335
将内存耗尽处理流程卸载到用户空间的方法和装置的制造方法
【专利摘要】本申请公开了将内存耗尽处理流程卸载到用户空间的方法和装置。所述方法的一【具体实施方式】包括:当进程触发内存耗尽事件时,将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面;所述用户空间的内存耗尽服务进程通过所述内存页面获取所述内存耗尽事件的相关信息;所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理所述内存耗尽事件。该实施方式实现了将内核态的内存耗尽处理卸载到用户态执行,将整个内存耗尽处理过程交由一个用户态进程来完成,降低内存耗尽处理执行的复杂度,也易于内存耗尽处理策略的调整及业务的升级替换。
【专利说明】
将内存耗尽处理流程卸载到用户空间的方法和装置
技术领域
[0001]本申请涉及计算机技术领域,具体涉及计算机操作系统技术领域,尤其涉及将内存耗尽处理流程卸载到用户空间的方法和装置。
【背景技术】
[0002]计算机在大压力高负载的情况下,为提高机器的资源利用率,会经常出现将机器的物理内存耗尽的情况,进而频繁触发00M(out of memory,内存耗尽)处理。内核的OOM处理成为降低系统内存压力的最后一道屏障。标准内核的OOM处理的执行也因使用情景的变化而变的复杂,大压力及负载下在内核态执行过程也显得过于冗长,且长时间在操作系统内核态处理易引起系统死锁而导致系统宕机等问题,降低了服务的稳定性及可用性。
[0003]另一方面,随着使用场景的变化,业务层面对OOM处理的策略也会有一些更多的需求,当内存超限后,提出了一些新的挑选结束进程的策略,比如优先结束低优先级类型的作业等。这些策略变更会使OOM处理逻辑更加的复杂,OOM处理过程越发的耗时,并且在内核中实现这些策略给业务的升级和部署也带来了一定的困难。

【发明内容】

[0004]本申请的目的在于提出一种将内存耗尽处理流程卸载到用户空间的方法和装置,来解决以上【背景技术】部分提到的技术问题。
[0005]第一方面,本申请提供了一种将内存耗尽处理流程卸载到用户空间的方法,所述方法包括:当进程触发内存耗尽事件时,将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面,所述相关信息包括:所述进程的身份标识及所述进程所在的内存资源控制子系统的路径;所述用户空间的内存耗尽服务进程通过所述内存页面获取所述内存耗尽事件的相关信息;所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理所述内存耗尽事件。
[0006]在一些实施例中,所述方法还包括:将触发内存耗尽事件的进程由运行状态切换为睡眠状态,并将所述触发内存耗尽事件的进程挂到等待队列上;在内存耗尽事件处理完成后唤醒所述等待队列上的所述触发内存耗尽的进程,重新尝试申请内存。
[0007]在一些实施例中,所述方法还包括:在将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面之后通知所述用户空间的内存耗尽服务进程。
[0008]在一些实施例中,所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理内存耗尽事件,包括:所述用户空间的内存耗尽服务进程将可结束的进程按照进程的内存占用情况打分;所述用户空间的内存耗尽服务进程向分数最高的进程发送结束进程ig号。
[0009]在一些实施例中,所述用户空间的内存耗尽服务进程不响应用户空间发送的结束进程的信号。
[0010]在一些实施例中,所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理内存耗尽事件还包括:所述用户空间的内存耗尽服务进程向所述内核空间发送内存耗尽事件处理完成的通知。
[0011]在一些实施例中,所述方法还包括:对所述用户空间的内存耗尽服务进程进行监控,在所述用户空间的内存耗尽服务进程退出之前,主动将退出事件上报。
[0012]第二方面,本申请提供了一种将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述装置包括:内存耗尽内核模块,配置用于当进程触发内存耗尽事件时,将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的存储模块,所述相关信息包括:所述进程的身份标识及所述进程所在的内存资源控制子系统的路径;存储模块,配置用于存储所述内存耗尽事件的相关信息;内存耗尽服务模块,配置用于通过所述存储模块获取所述内存耗尽事件的相关信息,还配置用于利用所述内存耗尽事件的相关信息处理所述内存耗尽事件。
[0013]在一些实施例中,所述装置还包括:暂停进程模块,配置用于将触发内存耗尽事件的进程由运行状态切换为睡眠状态,并将所述触发内存耗尽事件的进程挂到等待队列上;在内存耗尽事件处理完成后唤醒所述等待队列上的所述触发内存耗尽的进程,重新尝试申请内存。
[0014]在一些实施例中,所述内存耗尽内核模块还配置用于:在将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的存储模块之后通知所述内存耗尽服务模块。
[0015]在一些实施例中,所述内存耗尽服务模块还配置用于:所述用户空间的内存耗尽服务进程将可结束的进程按照进程的内存占用情况打分;所述用户空间的内存耗尽服务进程向分数最高的进程发送结束进程信号。
[0016]在一些实施例中,所述内存耗尽服务模块还配置用于不响应用户空间发送的结束进程的信号。
[0017]在一些实施例中,所述内存耗尽服务模块还配置用于向所述内存耗尽内核模块发送内存耗尽事件处理完成的通知。
[0018]在一些实施例中,所述装置还包括:监控模块,配置用于对所述用户空间的内存耗尽服务进程进行监控,在所述用户空间的内存耗尽服务进程退出之前,主动将退出事件上报所述内存耗尽内核模块。
[0019]本申请提供的将内存耗尽处理流程卸载到用户空间的方法和装置,通过内核将OOM事件相关信息写入内核空间与用户空间共享的内存页面,用户空间读取所述写入的OOM事件相关信息后进行OOM处理,将内核态的OOM机制卸载到用户态执行,将整个OOM处理过程交由一个用户态进程来完成,降低OOM执行的复杂度,也易于OOM策略的调整及业务的升级替换。
【附图说明】
[0020]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0021]图1是本申请可以应用于其中的示例性系统架构图;
[0022]图2是根据本申请的将内存耗尽处理流程卸载到用户空间的方法的一个实施例的流程图;
[0023]图3是根据本申请的将内存耗尽处理流程卸载到用户空间的方法的一个应用场景的不意图;
[0024]图4是根据本申请的将内存耗尽处理流程卸载到用户空间的方法的又一个实施例的流程图;
[0025]图5是根据本申请的将内存耗尽处理流程卸载到用户空间的装置的一个实施例的结构示意图;
[0026]图6是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。
【具体实施方式】
[0027]下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
[0028]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0029]图1示出了可以应用本申请的将内存耗尽处理流程卸载到用户空间的方法或将内存耗尽处理流程卸载到用户空间的装置的实施例的示例性系统架构100。
[0030]如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
[0031]用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
[0032]终端设备101、102、103可以是具有操作系统的各种电子设备。包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Aud1 LayerIII,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Aud1Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
[0033]服务器105可以是具有Wind0W、LinUX等操作系统的服务器。
[0034]需要说明的是,本申请实施例所提供的将内存耗尽处理流程卸载到用户空间的方法一般由服务器105或终端设备101、102、103执行,相应地,将内存耗尽处理流程卸载到用户空间的装置一般设置于服务器105中或终端设备101、102、103中。
[0035]应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[0036]继续参考图2,示出了示出了根据本申请的将内存耗尽处理流程卸载到用户空间的方法的一个实施例的流程200。所述的将内存耗尽处理流程卸载到用户空间的方法,包括以下步骤:
[0037]步骤201,将内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面。
[0038]在本实施例中,将内存耗尽处理流程卸载到用户空间的方法运行于其上的电子设备(例如图1所示的服务器或终端)可以在内核发生内存耗尽时将内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面(mmap)。其中,相关信息包括:触发OOM的进程的身份标识PID及触发OOM的进程所在的内存资源控制子系统(memory cgroup)的路径。
[0039]在本实施例的一些可选的实现方式中,在将内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面之后通知用户空间的内存耗尽服务进程。
[0040]在本实施例的一些可选的实现方式中,在内存紧张的情况下,为了保证用户空间的内存耗尽服务进程可以顺利申请到内存完成计算任务,在内存耗尽服务进程创建时,将为其附加TIF_MEMDIE标志,确保其可以使用系统为内核保留的位于水位线以下的内存。
[0041]在本实施例的一些可选的实现方式中,当用户空间的内存耗尽服务进程出现问题时,内存耗尽服务将自动进入内核原有的标准内存耗尽处理过程。
[0042]步骤202,用户空间的内存耗尽服务进程通过内存页面获取内存耗尽事件的相关
?目息O
[0043]在本实施例中,在内核将内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面之后,用户空间的内存耗尽服务进程读取该信息。
[0044]在本实施例的一些可选的实现方式中,用户空间的内存耗尽服务进程在接收到内核发送的内存耗尽事件的相关信息写入完成的通知后再读取该信息。
[0045]步骤203,用户空间的内存耗尽服务进程利用内存耗尽事件的相关信息处理内存耗尽事件。
[0046]在本实施例中,用户空间的内存耗尽服务进程利用内存耗尽事件的相关信息处理内存耗尽事件,结束一些进程以释放内存空间。
[0047]在本实施例的一些可选的实现方式中,用户空间的内存耗尽服务进程将可结束的进程按照进程的内存占用情况打分;所述用户空间的内存耗尽服务进程向分数最高的进程发送结束进程信号。
[0048]在本实施例的一些可选的实现方式中,用户空间的内存耗尽服务进程不响应用户空间发送的结束进程的信号。由于内存耗尽服务进程本身作为内核功能的一个卸载,要求内存耗尽服务进程在系统运行期间一直存在,由此在内存耗尽服务进程启动时由内核清空进程的信号处理,并置位SIGNAL_UNKILLABLE标志,以使内存耗尽服务进程不再响应用户态发送的结束信号,避免内存耗尽服务进程被人为的误杀掉。
[0049]在本实施例的一些可选的实现方式中,用户空间的内存耗尽服务进程向内核空间发送内存耗尽事件处理完成的通知。内存耗尽内核模块接收到来自用户空间的通知后,唤醒那些等待分配内存的任务。
[0050]在本实施例的一些可选的实现方式中,对用户空间的内存耗尽服务进程进行监控,在用户空间的内存耗尽服务进程退出之前,主动将退出事件上报。例如,基于内核Utrace框架实现对用户空间的内存耗尽服务进程的监控。当用户空间的内存耗尽服务进程异常退出时,在进程退出前会主动将进程的退出事件上报至监控模块,由此可将当前内存耗尽服务进程正在处理但未处理完的内存耗尽事件中的进程唤醒,以使其再次尝试申请内存,如再次失败的话会由标准内核中的内存耗尽机制负责处理。
[0051]继续参见图3,图3是根据本实施例的将内存耗尽处理流程卸载到用户空间的方法的应用场景的一个示意图。在图3的应用场景中,事件处理流程如下所示:
[0052](I)当发生内存耗尽事件301时,在内核中触发内存耗尽事件的路径(典型的路包括:在memory cgroup申请内存的路径和系统缺页异常处理函数中)上的代码首先将触发内存耗尽事件的进程由运行状态切换为睡眠状态,并主动触发一次调度,以使进程让出CPU,并将其挂到等待队列302上,然后将内存耗尽事件通过eventfd发送给内存耗尽内核模块303;
[0053](2)内存耗尽内核模块303会将内存耗尽事件的相关信息,包括触发内存耗尽的进程PID及进程所在的memory cgroup路径写入一个用户态与内核态共享的mmap内存页面304;
[0054](3)通过eventfd方式唤醒并通知用户空间的内存耗尽服务进程305;
[0055](4)用户空间的内存耗尽服务进程305由mmap内存页面304获取内存耗尽事件的相关信息,包括触发内存耗尽的进程PID及进程所在的memory cgroup路径;
[0056](5)内存耗尽服务进程305遍历并为各个进程306打分,并基于策略选定将被结束的进程;
[0057](6)内存耗尽服务进程305向选定的进程发送SIGKILL信号;
[0058](7)内存耗尽服务进程305向内存耗尽内核模块303发送完成内存耗尽事件处理完成通知;当内存耗尽服务进程305异常退出时,在进程退出前会主动将进程的退出事件上报至监控模块307,由此可将当前内存耗尽进程305正在处理但未处理完的内存耗尽事件中的进程唤醒,以使其再次尝试申请内存,如再次失败的话会由标准内核中的内存耗尽机制负责处理。
[0059](8)内存耗尽内核模块303唤醒等待队列302上的进程,重新尝试申请内存。
[0060]本申请的上述实施例提供的方法通过将内存耗尽处理流程卸载到用户空间,通过eventfd的方式通知内存耗尽内核模块,而不是直接调用内存耗尽内核模块中的函数,从而达到解耦的目的,内存耗尽内核模块可以顺利的在系统运行时进行加载和卸载,因此降低了内存耗尽处理逻辑的复杂度,减少内存耗尽处理过程的耗时,并且使业务的升级和部署更容易。
[0061]进一步参考图4,其示出了将内存耗尽处理流程卸载到用户空间的方法的又一个实施例的流程400。该将内存耗尽处理流程卸载到用户空间的方法的流程400,包括以下步骤:
[0062]步骤401,将触发内存耗尽事件的进程由运行状态切换为睡眠状态,并将触发内存耗尽事件的进程挂到等待队列上。
[0063]在本实施例中,将内存耗尽处理流程卸载到用户空间的方法运行于其上的电子设备(例如图1所示的服务器或终端)可以在发生内存耗尽事件时,在内核中触发内存耗尽事件的路径上的代码首先将触发内存耗尽事件的进程由运行状态切换为睡眠状态并将其挂到等待队列上。
[0064]在本实施例的一些可选的实现方式中,当内存资源控制子系统(memorycgroup)内已经处于内存耗尽状态时将暂停memory cgroup组内新进程的创建或非组内的进程迀移Amemory cgroup组。对已经在组内的进程新创建进程时,新进程在被创建后如果所处的memory cgroup处于内存耗尽状态,则设置TIF_MEMCG_THR0TTLE标志位,并向进程递送信号,以使新创建的进程在完成创建后第一次运行时即立刻进出信号处理过程中,并在信号处理过程中,使新创建的进程切换为睡眠状态并将其挂入对应内存组的内存耗尽事件等待队列上,并将其从所在的memory cgroup组中摘除,直至所在的memory cgroup内的内存耗尽事件被处理完,再将内存耗尽事件等待队列上的进程唤醒,并重新将进程添加至目标memory cgroup中。同理,当外部进程尝试迀移入memory cgroup时,如果目标memorycgroup已经处于内存耗尽状态,则向新进入的进程递送信号,后续处理与处理新建进程相同。
[0065]步骤402,将内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面。
[0066]步骤403,用户空间的内存耗尽服务进程通过内存页面获取内存耗尽事件的相关
?目息O
[0067]步骤404,用户空间的内存耗尽服务进程利用内存耗尽事件的相关信息处理内存耗尽事件。
[0068]由于步骤402-404与步骤201-203基本相同,因此不再赘述。
[0069]步骤405,在内存耗尽事件处理完成后唤醒等待队列上的触发内存耗尽的进程,重新尝试申请内存。
[0070]在本实施例中,内核收到用户空间发送的内存耗尽事件处理完成通知后唤醒等待队列上的触发内存耗尽的进程,重新尝试申请内存。
[0071]从图4中可以看出,与图2对应的实施例相比,本实施例中的将内存耗尽处理流程卸载到用户空间的方法的流程400突出了对已经处于内存耗尽状态的memory cgroup处理的步骤。对已经处于内存耗尽状态的memory cgroup,暂停进程的新建及外部进程向当前memory cgroup的迀移,由此可避免新建进程或新进入的进程进一步的消耗内存,从而在本已达到内存使用上限的memory cgroup组内引发新的一轮内存耗尽,极端情况下,频繁的新建或新调度进入进程,甚至会引发内存耗尽风暴,使系统长时间处于内存耗尽状态而无法提供正常服务,另一方面对正在执行的内存耗尽处理过程,也可减少待处理的进程数目,提高内存耗尽处理的速度。
[0072]进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种将内存耗尽处理流程卸载到用户空间的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
[0073]如图5所示,本实施例所述的将内存耗尽处理流程卸载到用户空间的装置500包括:内存耗尽内核模块501、存储模块502和内存耗尽服务模块503。其中,内存耗尽内核模块501配置用于当进程触发内存耗尽事件时,将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的存储模块,所述相关信息包括:所述进程的身份标识及所述进程所在的内存资源控制子系统的路径;存储模块502配置用于存储所述内存耗尽事件的相关信息;内存耗尽服务模块503配置用于通过所述存储模块获取所述内存耗尽事件的相关信息,还配置用于利用所述内存耗尽事件的相关信息处理所述内存耗尽事件。
[0074]在本实施例中,内存耗尽内核模块501位于内核空间,存储模块502由用户空间和内核空间共享,内存耗尽服务模块503位于用户空间。
[0075]在本实施例的一些可选的实现方式中,将内存耗尽处理流程卸载到用户空间的装置500还包括:暂停进程模块,配置用于将触发内存耗尽事件的进程由运行状态切换为睡眠状态,并将所述触发内存耗尽事件的进程挂到等待队列上;在内存耗尽事件处理完成后唤醒所述等待队列上的所述触发内存耗尽的进程,重新尝试申请内存。
[0076]在本实施例的一些可选的实现方式中,内存耗尽内核模块501还配置用于:在将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的存储模块之后通知所述内存耗尽服务模块。
[0077]在本实施例的一些可选的实现方式中,内存耗尽服务模块503还配置用于:所述用户空间的内存耗尽服务进程将可结束的进程按照进程的内存占用情况打分;所述用户空间的内存耗尽服务进程向分数最高的进程发送结束进程信号。
[0078]在本实施例的一些可选的实现方式中,内存耗尽服务模块503还配置用于不响应用户空间发送的结束进程的信号。
[0079]在本实施例的一些可选的实现方式中,内存耗尽服务模块503还配置用于向所述内存耗尽内核模块发送内存耗尽事件处理完成的通知。
[0080]在本实施例的一些可选的实现方式中,将内存耗尽处理流程卸载到用户空间的装置500还包括:监控模块,配置用于对所述用户空间的内存耗尽服务进程进行监控,在所述用户空间的内存耗尽服务进程退出之前,主动将退出事件上报所述内存耗尽内核模块。
[0081]下面参考图6,其示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统600的结构示意图。
[0082]如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(R0M)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 60KROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线 604。
[0083]以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606 ;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口 605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0084]特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的方法中限定的上述功能。
[0085]附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0086]描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括内存耗尽内核模块、存储模块和内存耗尽服务模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,存储模块还可以被描述为“存储所述内存耗尽事件的相关信息的模块”。
[0087]作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:当进程触发内存耗尽事件时,将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面,所述相关信息包括:所述进程的身份标识及所述进程所在的内存资源控制子系统的路径;所述用户空间的内存耗尽服务进程通过所述内存页面获取所述内存耗尽事件的相关信息;所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理所述内存耗尽事件。
[0088]以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
【主权项】
1.一种将内存耗尽处理流程卸载到用户空间的方法,其特征在于,所述方法包括: 当进程触发内存耗尽事件时,将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面,所述相关信息包括:所述进程的身份标识及所述进程所在的内存资源控制子系统的路径; 所述用户空间的内存耗尽服务进程通过所述内存页面获取所述内存耗尽事件的相关信息; 所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理所述内存耗尽事件。2.根据权利要求1所述的将内存耗尽处理流程卸载到用户空间的方法,其特征在于,所述方法还包括: 将触发内存耗尽事件的进程由运行状态切换为睡眠状态,并将所述触发内存耗尽事件的进程挂到等待队列上; 在内存耗尽事件处理完成后唤醒所述等待队列上的所述触发内存耗尽的进程,重新尝试申请内存。3.根据权利要求1所述的将内存耗尽处理流程卸载到用户空间的方法,其特征在于,所述方法还包括: 在将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的内存页面之后通知所述用户空间的内存耗尽服务进程。4.根据权利要求1所述的将内存耗尽处理流程卸载到用户空间的方法,其特征在于,所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理内存耗尽事件,包括: 所述用户空间的内存耗尽服务进程将可结束的进程按照进程的内存占用情况打分; 所述用户空间的内存耗尽服务进程向分数最高的进程发送结束进程信号。5.根据权利要求4所述的将内存耗尽处理流程卸载到用户空间的方法,其特征在于,所述用户空间的内存耗尽服务进程不响应用户空间发送的结束进程的信号。6.根据权利要求1所述的将内存耗尽处理流程卸载到用户空间的方法,其特征在于,所述用户空间的内存耗尽服务进程利用所述内存耗尽事件的相关信息处理内存耗尽事件还包括: 所述用户空间的内存耗尽服务进程向所述内核空间发送内存耗尽事件处理完成的通知。7.根据权利要求1所述的将内存耗尽处理流程卸载到用户空间的方法,其特征在于,所述方法还包括: 对所述用户空间的内存耗尽服务进程进行监控,在所述用户空间的内存耗尽服务进程退出之前,主动将退出事件上报。8.—种将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述装置包括: 内存耗尽内核模块,配置用于当进程触发内存耗尽事件时,将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的存储模块,所述相关信息包括:所述进程的身份标识及所述进程所在的内存资源控制子系统的路径; 存储模块,配置用于存储所述内存耗尽事件的相关信息; 内存耗尽服务模块,配置用于通过所述存储模块获取所述内存耗尽事件的相关信息,还配置用于利用所述内存耗尽事件的相关信息处理所述内存耗尽事件。9.根据权利要求8所述的将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述装置还包括: 暂停进程模块,配置用于将触发内存耗尽事件的进程由运行状态切换为睡眠状态,并将所述触发内存耗尽事件的进程挂到等待队列上;在内存耗尽事件处理完成后唤醒所述等待队列上的所述触发内存耗尽的进程,重新尝试申请内存。10.根据权利要求8所述的将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述内存耗尽内核模块还配置用于: 在将所述内存耗尽事件的相关信息写入用户空间与内核空间共享的存储模块之后通知所述内存耗尽服务模块。11.根据权利要求8所述的将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述内存耗尽服务模块还配置用于: 所述用户空间的内存耗尽服务进程将可结束的进程按照进程的内存占用情况打分; 所述用户空间的内存耗尽服务进程向分数最高的进程发送结束进程信号。12.根据权利要求11所述的将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述内存耗尽服务模块还配置用于不响应用户空间发送的结束进程的信号。13.根据权利要求8所述的将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述内存耗尽服务模块还配置用于向所述内存耗尽内核模块发送内存耗尽事件处理完成的通知。14.根据权利要求8所述的将内存耗尽处理流程卸载到用户空间的装置,其特征在于,所述装置还包括: 监控模块,配置用于对所述用户空间的内存耗尽服务进程进行监控,在所述用户空间的内存耗尽服务进程退出之前,主动将退出事件上报所述内存耗尽内核模块。
【文档编号】G06F9/50GK106020976SQ201610320045
【公开日】2016年10月12日
【申请日】2016年5月13日
【发明人】袁林思, 王柏生, 孙栋, 李志勇
【申请人】北京百度网讯科技有限公司
再多了解一些
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1