【內存】Linux 內核優化實戰 - vm.overcommit_memory

目錄

      • `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_ratioovercommit_ratio 默認為 50%)。
適用于對穩定性要求極高的場景(如服務器關鍵服務),避免因內存過度分配導致系統崩潰。
三、相關參數與配置方式
  1. vm.overcommit_ratio

    • vm.overcommit_memory=2 時生效,用于設置物理內存的過度承諾比例(默認 50%)。
    • 例如:vm.overcommit_ratio=30 表示允許分配的內存總量不超過 swap + 物理內存 * 30%
  2. 配置方式

    • 臨時修改(無需重啟系統):
      # 查看當前值
      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 參數調整進程被終止的優先級。
  • 監控與調優:修改參數后需持續監控內存使用情況(如使用 freetophtop 等工具),避免因配置不當導致性能問題或系統崩潰。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85865.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python:.py文件轉換為雙擊可執行的Windows程序(版本2)

流程步驟: 這個流程圖展示了將 Python .py 文件轉換為 Windows 可執行程序的完整過程,主要包括以下步驟: 1、準備 Python文件,確保代碼可獨立運行 2、安裝打包工具(如 PyInstaller) 3、打開命令提示符并定位…

【請關注】mysql一些經常用到的高級SQL

經常去重復數據,數據需要轉等操作,匯總高級SQL MySQL操作 一、數據去重(Data Deduplication) 去重常用于清除重復記錄,保留唯一數據。 1. 使用DISTINCT關鍵字去重單列 -- 從用戶表中獲取唯一的郵箱地址 SELECT DISTIN…

RA4M2開發涂鴉模塊CBU(2)----配置按鍵開啟LED

RA4M2開發涂鴉模塊CBU.2--配置按鍵開啟LED 概述視頻教學樣品申請硬件準備參考程序按鍵口配置中斷回調函數主程序 概述 本實驗演示如何在 Renesas RA4M2 單片機上使用 GPIO 輸入(按鍵) 觸發 GPIO 輸出(LED),并使用e2st…

Linux——Json

一 概念 json是一種輕量級,基于文本的,可讀的數據交換格式,能夠讓數據在不同系統(比如前端—后端,服務器—客戶端)間方便傳遞/存儲。在編程語言中都內置了處理json數據的方法 二 語法規則 1. 數據格式&a…

大模型之微調篇——指令微調數據集準備

寫在前面 高質量數據的準備是微調大模型的重中之重,一些高質量的數據集可能遠比模型性能更佳重要。 我是根據自己的數據照著B站up code花園LLaMA Factory 微調教程:如何構建高質量數據集?_嗶哩嗶哩_bilibili做的。 數據集格式 在LLaMA Fa…

LVS—DR模式

LVS—DR模式 LVS DR 模式詳細簡介 一、模式定義與核心原理 LVS DR(Direct Routing)模式,即直接路由模式,是 Linux Virtual Server(LVS)實現負載均衡的經典模式之一,工作于網絡四層&#xff0…

寶玉分享VibeCoding構建Agent

借助 Claude Code 完成的一個翻譯智能體 (Translator Agent)。你只需輸入一段文字、一個網址或一個本地文件路徑,它就能自動提取內容并完成翻譯。更酷的是,它還能修正原文中的拼寫錯誤,確保譯文的準確流暢。 到底什么是“真正的”AI Agent&a…

在spring boot中使用Logback

在 Spring Boot 中使用 Logback 作為日志框架是開發中的常見需求,因其高性能和靈活配置而廣受青睞。以下是詳細實踐指南,結合了配置方法、代碼示例及最佳實踐: 🔧 一、依賴配置 Spring Boot 默認集成了 Logback,無需手…

騰訊云 Lighthouse 輕量應用服務器:數據驅動的架構選型指南

摘要:騰訊云 Lighthouse 作為面向輕量級應用場景的優化解決方案,通過高性價比套餐式售賣、開箱即用應用模板及流量包計費模式,顯著降低中小企業與開發者的上云門檻。本文基于性能測試與橫向對比,量化分析其核心優勢與適用邊界。 …

Linux TCP/IP協議棧中的TCP輸入處理:net/ipv4/tcp_input.c解析

在網絡通信領域,TCP(傳輸控制協議)因其可靠的面向連接特性而被廣泛應用。Linux內核的TCP/IP協議棧實現了對TCP協議的高效處理,其中net/ipv4/tcp_input.c文件扮演著關鍵角色,負責處理TCP數據包的輸入邏輯。下面是對該文件核心功能的深入剖析。 一、TCP數據包接收與處理 (…

物聯網傳輸網關、RTU、DTU及SCADA系統技術解析

目錄 摘要 一、引言 二、物聯網傳輸網關 1. 定義 2. 類型 3. 分類 4. 工作原理 5. 差異分析 總結: 三、RTU(遠程終端單元) 1. 定義 2. 工作原理 3. 特點 4. 應用場景 四、DTU(數據傳輸單元) 1. 定義 …

【unity游戲開發——熱更新】YooAsset簡化資源加載、打包、更新等流程

注意:考慮到熱更新的內容比較多,我將熱更新的內容分開,并全部整合放在【unity游戲開發——熱更新】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、什么是YooAsset?2、系統需求3、系統特點 一、下載安裝…

AWS RDS/Aurora 開啟 Database Insights 高級模式全攻略

想要深入了解數據庫性能問題?AWS Database Insights 高級模式為您提供強大的性能分析工具。本文詳細對比標準模式與高級模式的功能差異,并提供完整的啟用指南和實戰測試結果。 一、Database Insights 模式對比 AWS CloudWatch Database Insights 提供兩種模式:標準模式和高…

XML SimpleXML

XML SimpleXML 引言 XML(可擴展標記語言)是一種用于存儲和傳輸數據的標記語言,它被廣泛應用于Web服務和數據交換。SimpleXML是PHP中一個處理XML數據非常便捷的庫。本文將詳細介紹SimpleXML庫的基本用法,幫助讀者快速掌握XML數據…

Docker簡單介紹與使用以及下載對應鏡像(項目前置)

DockerDocker安裝Docker卸載Docker配置鏡像源配置鏡像加速 Docker服務命令1.鏡像操作命令2.容器操作命令 安裝Mysql**數據卷掛載** Docker 在linux中軟件安裝說起: 以前在linux中安裝軟件,是直接安裝在linux操作系統中,軟件和操作系統耦合度很高,不方便管理. 因為linux版本不…

MyBatis 簡介

MyBatis 簡介 MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射,能夠幫助開發者將 Java 對象與數據庫表進行靈活映射,簡化數據持久化操作。以下從多個維度詳細介紹 MyBatis: 一、核心定位與優勢 輕量級…

自監督學習在合成孔徑聲吶目標識別中的應用之論文閱讀

自監督學習在合成孔徑聲吶目標識別中的應用 BW Sheffield 美國巴拿馬城海軍水面作戰中心 1 引言 在自主水下航行器(AUVs)中應用計算機視覺面臨著獨特的挑戰,因為海洋環境往往條件不可預測且極為嚴苛。傳統計算機視覺研究主要依賴光學相機成像,而在光照不足、懸浮沉積物及水…

進程間通信2(命名管道)linux

1 命名管道 前面講到匿名管道,有一個很大的限制,那就是只有具有相同祖先(具有親緣關系)的進程間才能進行通信,但是如果想實現不同進程間的通信,這個時候命名管道就發揮著巨大作用。 命名管道是一種特殊類…

簡單通過SenseVoice給自己配置一個語音轉文字服務

首先把代碼下載下來 gitgithub.com:FunAudioLLM/SenseVoice.git 然后寫一個docker文件 FROM ubuntu:latestRUN apt-get update -y RUN apt-get install -y python3-full python3-pip RUN mkdir -p /SenseVoice WORKDIR /SenseVoice RUN python3 -m venv . ENV USE_CUDA0 EXP…

網絡釣魚攻擊

?根據2023年Proofpoint年度網絡釣魚報告顯示:91%的針對性攻擊始于釣魚郵件,平均每30秒就有一個企業成為攻擊目標,全球損失超過$6.5B? 一、釣魚攻擊技術深度解析 1. 釣魚攻擊核心技術架構 2. 現代釣魚技術演進 ?攻擊向量升級路線? ?當前…