目錄
- `vm.overcommit_memory` 解釋
- 一、概念與作用
- 二、參數取值與含義
- 三、相關參數與配置方式
- 四、實際應用場景建議
- 五、注意事項
vm.overcommit_memory
解釋
一、概念與作用
vm.overcommit_memory
是 Linux 內核中的一個參數,用于控制內存分配的“過度承諾”(Overcommit)策略。它決定了內核在分配內存時的保守程度,直接影響系統內存管理的行為和穩定性。
二、參數取值與含義
該參數可設置為 0、1、2 三種值,每種取值對應不同的內存管理策略:
取值 | 策略描述 | 適用場景 |
---|---|---|
0 | 啟發式過度承諾(默認值) 內核根據當前內存使用情況動態判斷是否允許分配內存。 當系統內存充足時允許適度過度承諾,內存緊張時則更保守。 | 適用于大多數常規場景,平衡性能與穩定性。 |
1 | 允許無條件過度承諾 內核會無條件允許內存分配請求,不嚴格檢查物理內存是否足夠。 可能導致內存耗盡(OOM, Out of Memory),但能最大化應用程序的內存申請成功率。 | 適用于需要運行大量進程或內存使用波動大的場景(如數據庫、緩存服務),但需謹慎使用,避免 OOM。 |
2 | 嚴格禁止過度承諾 內核會根據物理內存和 swap 空間的總量限制內存分配,確保分配的內存不超過 swap + 物理內存 * overcommit_ratio (overcommit_ratio 默認為 50%)。 | 適用于對穩定性要求極高的場景(如服務器關鍵服務),避免因內存過度分配導致系統崩潰。 |
三、相關參數與配置方式
-
vm.overcommit_ratio
- 當
vm.overcommit_memory=2
時生效,用于設置物理內存的過度承諾比例(默認 50%)。 - 例如:
vm.overcommit_ratio=30
表示允許分配的內存總量不超過swap + 物理內存 * 30%
。
- 當
-
配置方式
- 臨時修改(無需重啟系統):
# 查看當前值 sysctl vm.overcommit_memory # 設置為 1(允許無條件過度承諾) sysctl -w vm.overcommit_memory=1 # 設置 overcommit_ratio 為 30 sysctl -w vm.overcommit_ratio=30
- 永久修改(修改配置文件):
編輯/etc/sysctl.conf
,添加或修改以下行后執行sysctl -p
生效:vm.overcommit_memory = 1 vm.overcommit_ratio = 30
- 臨時修改(無需重啟系統):
四、實際應用場景建議
-
場景 1:常規服務器(如 Web 服務、中小型數據庫)
- 建議保持默認值
vm.overcommit_memory=0
,內核會自動平衡內存分配。
- 建議保持默認值
-
場景 2:高內存需求服務(如 Redis、MongoDB)
- 可設置
vm.overcommit_memory=1
,但需配合 OOM Killer 策略(vm.oom_killer_enabled
),避免關鍵進程因內存耗盡被終止。
- 可設置
-
場景 3:穩定性優先的關鍵服務(如金融、醫療系統)
- 建議設置
vm.overcommit_memory=2
,并合理調整overcommit_ratio
(如設為 30-50),確保內存分配在安全范圍內。
- 建議設置
五、注意事項
- OOM 風險:當
vm.overcommit_memory=1
時,系統可能因內存耗盡觸發 OOM Killer,終止某個進程以釋放內存。可通過oom_score_adj
參數調整進程被終止的優先級。 - 監控與調優:修改參數后需持續監控內存使用情況(如使用
free
、top
、htop
等工具),避免因配置不當導致性能問題或系統崩潰。