臉書(Facebook)開源內部用來解決記憶體不足(Out-Of-Memory,OOM)的解決方案Oomd,臉書提到,隨著服務發展而擴建的生產環境,由於規格不同,造成軟體在部分的機器上運作,會有記憶體空間不足的情況發生。Oomd可以在用戶空間而非核心空間,綜合PSI工具與Cgroup2機制兩種方法,解決記憶體不足的問題。

臉書現在已有超過22億用戶,而其基礎架構設施也擴展支撐著新聞、Messenger、Instagram、WhatsApp以及Oculus等其他產品,這些產品散布在各地區的分散式資料中心的數百萬臺伺服器中,臉書生產工程師DANIEL XU提到,由於基礎架構設施規模不斷的擴展,因此機器與網路設備也橫跨越來越多代,多代生產環境的缺點便是,同一個軟體在不同規格的機器上運作狀況不相同。

部分軟體在大部分的機器上運作正常,卻在某部分的機器上會發生記憶體不足的情況,DANIEL XU提到,臉書在機器上使用Linux作業系統,而Linux作業系統上用來解決記憶體不足的機制,雖然在多數情況運作良好,但是在部分情況介入太遲,有機會造成Livelock的現象。

因此臉書開發了Oomd來解決常見的記憶體不足情況,這個解決方案不只更快更可靠,他的一大特色便是能在使用者空間而非核心空間運作,另外,Oomd提供了Pre-OOM Hooks,能提早察覺到工作負載記憶體不足的威脅,而其提供的套件系統,能讓使用者指定自訂義的政策,以解決不同主機的工作負載運作狀況。

DANIEL XU提到,他們為了要提高記憶體的使用效率,通常會讓程序分配的記憶體多於系統可用記憶體的容量,這種記憶體配置策略,基於應用程式並不需要所有已分配記憶體的假設。但這種假設並非總是成立,因此當記憶體需求超過總量時,Linux OOM殺手便會啟動,並試圖回收記憶體以確保系統正常運作,但是由於這個機制不分工作負載的重要性,因此當OOM殺手介入可能錯殺重要程序,增加應用程式運作的風險。

Oomd解決方案由兩個關鍵組成,第一則是PSI(Pressure Stall Information),這是新的公用工具,用來追蹤三項系統資源CPU、記憶體與I/O,並提供這些資源的時間軸視圖。PSI部署在生產環境時,其指標可以用來作為追蹤資源短缺工具,允許在使用者空間根據需求,主動採取必要措施。另一個關鍵則是Cgroup2,這是Linux核心機制,能以分層的方式組織程序,並以可控與可配置的方法,以階層結構配置系統資源。Oomd利用Cgroup2的機制來確保每一個工作負載都運作得當。

Oomd能以更全面的方式監控系統資源,而不像Linux OOM殺手僅關注核心問題,但也由於記憶體不足的檢測標準會因任務不同而不同,因此才需要外掛系統來對特殊情形制定客製化政策。Oomd中有一個順序列表,上面記錄著可以優先結束的程序,當某些條件成立時,Oomd便會優先結束這些程序或是服務。

經過實驗證明,他們即便讓程序重複地大量請求記憶體,Oomd依然能夠維持高效率配置記憶體,比起預設的Linux核心OOM殺手更加可靠快速。臉書已經大規模在伺服器上部署Oomd,發現從伺服器到交換器,都能有效分配運算資源,並減少在工作負載上發生Livelock的頻率。


Advertisement

更多 iThome相關內容