導讀 | 近日,在 Facebook 的網站上,該公司的 Daniel Xu 宣佈在 GPLv2 許可證下開源 oomd。oomd 是用戶空間內存溢出殺手(OOM Killer),它在最近關於塊 I/O 延遲控制器的文章中有被說起到。當內存不足時,內存溢出殺手會殺掉一些進程,它的主要任務是保護內核,所以應用程序可能會受到影響。 |
相比傳統的 Linux 內存溢出殺手,oomd 會全面監視系統,評估系統是否處於不可恢復的工做負荷下。在系統的 OOM Killer 做用前,oomd 會在用戶空間採起糾正措施。html
Facebook 表示,它們的基礎設施已經發展到包含新聞信息流、Messenger、Instagram、WhatsApp、Oculus以及其餘一系列產品。這些產品和它們背後的系統運行於分佈在多個地理分佈式數據中心的數百萬臺服務器上。隨着基礎設施規模不斷擴大,Facebook 的機器和網絡愈來愈多地跨越多代,這種多代生產環境的一個反作用是新的軟件版本或配置更改可能致使系統在一臺計算機上運行正常但在另外一臺計算機上遇到內存溢出(OOM)問題。傳統的 Linux 內存溢出殺手在某些狀況下運行良好,但在其餘狀況下,它啓動得太晚,致使系統進入不肯定時期的活鎖。linux
所以 Facebook 開發了oomd,一種更快、更可靠的解決方案,用於常見的內存溢出(OOM)狀況,它能夠在用戶空間而不是內核空間中運行。Facebook 設計的 oomd 包含兩個關鍵特性:pre-OOM鉤子(pre-OOM hooks)和自定義插件系統。在工做負載受到威脅以前,pre-OOM鉤子提供了對 OOM 的可見性。因爲 OOM 檢測標準可能因工做負載而異,所以插件系統支持對檢測和進程終止策略進行自定義。服務器
與用於內核空間內存溢出殺手的一些對比
網絡
結論分佈式
oomd 是新型的用戶空間內存溢出殺手(OOM Killer),容許應用程序開發者在工做負載消耗全部可用系統內存時自定義響應。Facebook 表示,他們的測試代表 oomd 是默認 Linux 內核內存溢出殺手的可靠而有效的替代品。他們已經在 Facebook 開發並部署了 oomd,發現它使自家的公司可以減小從構建服務器到機架交換機到共享計算資源的工做負載頻率。測試