將內存耗盡處理流程卸載到用戶空間的方法和裝置的制造方法
【專利摘要】本申請公開了將內存耗盡處理流程卸載到用戶空間的方法和裝置。所述方法的一【具體實施方式】包括:當進程觸發內存耗盡事件時,將所述內存耗盡事件的相關信息寫入用戶空間與內核空間共享的內存頁面;所述用戶空間的內存耗盡服務進程通過所述內存頁面獲取所述內存耗盡事件的相關信息;所述用戶空間的內存耗盡服務進程利用所述內存耗盡事件的相關信息處理所述內存耗盡事件。該實施方式實現了將內核態的內存耗盡處理卸載到用戶態執行,將整個內存耗盡處理過程交由一個用戶態進程來完成,降低內存耗盡處理執行的復雜度,也易于內存耗盡處理策略的調整及業務的升級替換。
【專利說明】
將內存耗盡處理流程卸載到用戶空間的方法和裝置
技術領域
[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日
【發明人】袁林思, 王柏生, 孫棟, 李志勇
【申請人】北京百度網訊科技有限公司