Linux內核內存管理相關的配置參數

Linux內核內存管理相關的配置參數(主要位于/proc/sys/vm/目錄下),用于調整內存分配、緩存管理、交換機制、OOM(內存溢出)策略等核心內存行為。以下是對每個參數的詳細解釋:

admin_reserve_kbytes
block_dump
compaction_proactiveness
compact_memory
compact_unevictable_allowed
dirty_background_bytes
dirty_background_ratio
dirty_bytes
dirty_expire_centisecs
dirty_ratio
dirtytime_expire_seconds
dirty_writeback_centisecs
drop_caches
extfrag_threshold
hugetlb_shm_group
laptop_mode
legacy_va_layout
lowmem_reserve_ratio
max_map_count
memory_failure_early_kill
memory_failure_recovery
min_free_kbytes
mmap_min_addr
mmap_rnd_bits
mmap_rnd_compat_bits
nr_hugepages
nr_overcommit_hugepages
oom_dump_tasks
oom_kill_allocating_task
overcommit_kbytes
overcommit_memory
overcommit_ratio
page-cluster
page_lock_unfairness
panic_on_oom
percpu_pagelist_fraction
stat_interval
stat_refresh
swappiness
user_reserve_kbytes
vfs_cache_pressure
watermark_boost_factor
watermark_scale_factor

1. 內存預留與保護相關

  • admin_reserve_kbytes
    為系統管理員(root用戶)預留的內存大小(單位:KB)。當系統內存緊張時,普通用戶可能無法分配內存,但root仍可使用預留內存進行緊急操作(如殺進程)。

  • user_reserve_kbytes
    為每個非root用戶預留的內存大小(單位:KB)。防止單個用戶耗盡內存導致其他用戶無法操作。

2. 臟頁(Dirty Page)管理

臟頁指內存中已修改但尚未寫入磁盤的文件數據,內核需定期將其同步到磁盤以保證數據一致性。

  • dirty_background_bytes / dirty_background_ratio
    觸發后臺同步(pdflush/flush線程)的臟頁閾值。

    • dirty_background_bytes:以字節為單位(絕對數值)。
    • dirty_background_ratio:以總內存的百分比為單位(相對比例)。
      兩者同時存在時,bytes優先級更高(非0時生效)。當臟頁達到此值,內核會在后臺異步同步臟頁,不阻塞用戶進程。
  • dirty_bytes / dirty_ratio
    觸發強制同步的臟頁閾值。

    • dirty_bytes:以字節為單位。
    • dirty_ratio:以總內存的百分比為單位。
      當臟頁達到此值,用戶進程的寫操作會被阻塞,直到臟頁同步到磁盤(避免臟頁過多導致數據丟失風險)。
  • dirty_expire_centisecs
    臟頁在內存中停留的最長時間(單位:厘秒,1厘秒=0.01秒)。超過此時間的臟頁會被標記為“過期”,下次后臺同步時優先寫入磁盤。

  • dirtytime_expire_seconds
    針對“僅修改時間”的臟頁(如僅更新文件atime/mtime,未修改內容)的過期時間(單位:秒)。用于優化僅元數據修改的場景。

  • dirty_writeback_centisecs
    后臺同步線程(flush)的喚醒間隔(單位:厘秒)。即使臟頁未達閾值,線程也會定期喚醒檢查并同步過期臟頁。

3. 內存壓縮與碎片管理

  • compaction_proactiveness
    內存碎片整理的“主動程度”(取值0-100)。值越高,內核越傾向于提前整理內存碎片,減少分配連續大頁時的失敗概率(適用于需要大頁的場景,如數據庫)。

  • compact_memory
    手動觸發內存碎片整理的開關。寫入1到該文件(echo 1 > /proc/sys/vm/compact_memory),內核會立即嘗試合并零散內存頁為連續頁。

  • compact_unevictable_allowed
    是否允許整理“不可驅逐”內存頁(如被鎖定的內存mlock())。1表示允許,可提高碎片整理效果,但可能短暫影響鎖定內存的進程。

  • extfrag_threshold
    內存外部碎片的閾值(0-1000)。外部碎片指內存中有足夠總空間,但無連續大頁可供分配的情況。值越低,內核越容易觸發碎片整理(如超過閾值則嘗試壓縮內存)。

4. 緩存與交換(Swap)管理

  • drop_caches
    手動釋放頁緩存、目錄項緩存(dentry)和索引節點緩存(inode)的開關。

    • 寫入1:釋放頁緩存(文件數據緩存)。
    • 寫入2:釋放dentry和inode緩存。
    • 寫入3:釋放所有緩存。
      注意:釋放緩存不會影響臟頁,需先同步臟頁(sync命令)再執行,避免數據丟失。
  • swappiness
    內核使用交換分區(Swap)的傾向程度(取值0-100)。

    • 值越高:越傾向于將內存中的不常用數據換出到Swap,為緩存騰出空間(如100時優先用Swap)。
    • 值越低:越傾向于保留內存數據,僅在內存緊張時使用Swap(如0時盡量不換出,適用于內存充足的服務器)。
  • vfs_cache_pressure
    內核回收目錄項(dentry)和索引節點(inode)緩存的傾向(取值0-200)。

    • 100:默認值,按正常比例回收緩存。
    • <100:減少回收緩存的頻率(更傾向保留緩存,適合文件操作頻繁的場景)。
    • 100:增加回收頻率(適合內存緊張,需釋放緩存給應用的場景)。

5. 大頁(HugePage)管理

大頁用于減少TLB(內存地址轉換緩存)的開銷,提升需要大量連續內存的應用(如數據庫、虛擬化)性能。

  • nr_hugepages
    預分配的靜態大頁數量。大頁大小由系統架構決定(如x86_64默認2MB),分配后會長期占用內存,不被內核自動回收。

  • nr_overcommit_hugepages
    動態分配的大頁數量(“超額提交”的大頁)。當靜態大頁不足時,內核可臨時分配此參數指定的大頁,用完后可回收。

  • hugetlb_shm_group
    允許使用大頁共享內存(SHM_HUGETLB)的用戶組ID(GID)。非該組用戶無法分配大頁共享內存,用于權限控制。

6. OOM(內存溢出)策略

當內存耗盡且無法回收時,內核會觸發OOM killer殺死進程釋放內存。

  • oom_dump_tasks
    OOM發生時是否打印所有進程的內存使用信息(1=打印,0=不打印)。幫助分析哪些進程消耗內存過多。

  • oom_kill_allocating_task
    OOM時是否優先殺死“觸發內存分配的進程”(1=優先殺死,0=按評分選擇)。減少誤殺關鍵進程的概率(如果分配進程是“罪魁禍首”)。

  • panic_on_oom
    OOM時是否觸發系統panic(0=不panic,僅殺進程;1=直接panic重啟;2=僅當無法殺死進程時panic)。生產環境通常設為0,避免系統直接崩潰。

  • memory_failure_early_kill
    當檢測到內存硬件錯誤(如壞頁)時,是否立即殺死訪問該壞頁的進程(1=立即殺死,0=嘗試恢復)。減少錯誤擴散風險。

  • memory_failure_recovery
    是否開啟內存硬件錯誤恢復機制(1=開啟,嘗試隔離壞頁并繼續運行;0=關閉,直接panic)。依賴硬件支持(如ECC內存)。

7. 內存過量使用(Overcommit)管理

Linux默認允許進程“過量申請內存”(實際使用時才分配物理內存),通過以下參數控制策略。

  • overcommit_memory
    內存過量使用的策略(取值0/1/2):

    • 0(默認):智能判斷,拒絕明顯不可能的申請(如申請超過總內存+Swap的內存)。
    • 1:允許所有過量申請(適合數據庫等需要預分配大量內存但實際使用少的場景)。
    • 2:嚴格限制,申請內存不得超過(總內存 - 已使用) + Swap * overcommit_ratio%,避免過量使用導致OOM。
  • overcommit_kbytes / overcommit_ratio
    配合overcommit_memory=2使用:

    • overcommit_kbytes:允許過量申請的內存上限(字節)。
    • overcommit_ratio:允許過量申請的比例(相對于Swap大小),默認50(即允許申請Swap的50%)。

8. 其他核心參數

  • min_free_kbytes
    系統始終保留的最小空閑內存(KB)。確保內核和關鍵進程有足夠內存運行,避免內存完全耗盡。值過小可能導致系統卡頓,過大會浪費內存。

  • lowmem_reserve_ratio
    針對不同內存區域(如DMA、Normal)的預留內存比例,防止某一區域內存耗盡影響其他區域(多適用于32位系統,64位系統較少調整)。

  • max_map_count
    單個進程可創建的內存映射(mmap)數量上限。防止進程創建過多映射耗盡系統資源(如惡意程序)。

  • mmap_min_addr
    進程通過mmap分配內存的最低地址(單位:字節)。默認非0,用于防止用戶進程映射低地址內存(如NULL指針附近),避免某些漏洞攻擊(如緩沖區溢出)。

  • page-cluster
    交換內存時一次讀取/寫入的連續頁數量(2^n,n為參數值)。值越高,交換效率越高(連續IO更快),但內存緊張時延遲可能增加。

  • watermark_boost_factor / watermark_scale_factor
    內存水位線(Watermark)調整參數。用于動態調整內存空閑閾值,在內存緊張時提高回收力度,避免頻繁觸發OOM。

這些參數的默認值已適配多數場景,但可根據實際需求(如服務器、嵌入式、桌面)調整。修改時需謹慎(通過echo 值 > /proc/sys/vm/參數名臨時生效),長期生效需寫入/etc/sysctl.conf

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

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

相關文章

Web開發 01

先放一下自己寫的手敲的第一個網站代碼&#xff01;~雖然很簡單但還是有點成就感&#xff01;&#xff01;開心&#x1f60a;<!DOCTYPE html> <html><head><title>Title!</title><link rel "stylesheet"href "style.css"…

Redis 生產實戰 7×24:容量規劃、性能調優、故障演練與成本治理 40 條軍規

&#xff08;一&#xff09;寫在前面&#xff1a;為什么需要“軍規” Redis 在測試環境跑得飛快&#xff0c;一到線上就“莫名其妙”抖動&#xff1b;大促前擴容 3 倍&#xff0c;成本卻翻 5 倍&#xff1b;一次主從切換&#xff0c;緩存雪崩導致下游 DB 被打掛&#xff1b;開發…

【DOCKER】綜合項目 MonitorHub (監控中心)

文章目錄1、項目架構圖1.1 架構組件2、實際實施2.1 安裝docker2.2 編寫dockerfile文件2.2.1 Prometheus2.2.2 node_exporter2.2.3 nginxvts模塊2.2.4 nginx_exporeter 服務發現文件2.2.5 maridb dockerfile文件2.2.6 鏡像總數2.3 具體操作2.3.1 Prometheus組件2.3.2 nginx組件2…

Java List 集合詳解:從基礎到實戰,掌握 Java 列表操作全貌

作為一名 Java 開發工程師&#xff0c;你一定在項目中頻繁使用過 List 集合。它是 Java 集合框架中最常用、最靈活的數據結構之一。無論是從數據庫查詢出的數據&#xff0c;還是前端傳遞的參數列表&#xff0c;List 都是處理這些數據的首選結構。本文將帶你全面掌握&#xff1a…

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言!

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言算法近幾年剛提出&#xff0c;知網還沒幾個人用&#xff0c;你先用&#xff0c;你就是創新&#xff01;算法新穎小眾&#xff0c;用的人很少&#xff0c;包含分解圖、頻譜圖、相關系數圖&#xff0c;效果如…

Oracle數據泵詳解——讓數據遷移像“點外賣”一樣簡單?

?今天我想和大家聊一個數據庫領域的“萬能搬運工”——Oracle數據泵&#xff08;Data Pump&#xff09;?。相信很多人都有過這樣的經歷&#xff1a;業務要上線新系統&#xff0c;得把舊庫的數據搬到新環境&#xff1b;或者領導突然要一份3年前的歷史數據&#xff0c;可不能影…

Leetcode 03 java

爬樓梯算法現在只看明白動態規劃&#xff0c;也沒有很難喲&#xff01;&#xff01;題目70. 爬樓梯假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f;java題解class Solution {public int climbStairs(…

怎么刪除 wps 的右鍵菜單

打開 WPS 點擊 WPS Office 選項卡&#xff0c;點擊右側全局配置》配置和修復工具點擊高級功能定制下的都可以關閉和隱藏點擊確定就可以了。

C++:list

一&#xff0c;list的介紹1&#xff0c;list初步&#xff08;1&#xff09;list是 C 標準模板庫 (STL) 中的一個雙向鏈表容器。它允許在常數時間內進行任意位置的插入和刪除操作&#xff0c;但不支持隨機訪問。&#xff08;2&#xff09;list容器的底層數據結構為帶頭雙向循環鏈…

深入理解Collections.addAll方法

文章目錄深入理解Collections.addAll方法概述方法定義基本用法1. 向List添加元素2. 向Set添加元素3. 添加數組元素與傳統add方法的比較使用傳統add方法使用Collections.addAll性能考慮注意事項實際應用場景與Collection.addAll的區別最佳實踐總結深入理解Collections.addAll方法…

CISP-PTE 練習題(完整一套)

目錄 1、SQL注入 2、文件上傳 3、文件包含 4、代碼審計 5、命令執行 6、端口掃描 7、sql 寫 webshell 8、3389 遠程桌面利用 1、SQL注入 sqllabs-less-24 二次注入 2、文件上傳 沒有對文件后綴進行檢測&#xff0c;但是對文件類型有檢測&#xff0c;需要使用圖片頭繞…

Vue3入門-計算屬性+監聽器

&#x1f3e0;個人主頁&#xff1a;Yui_ &#x1f351;操作環境&#xff1a;vscode\node.js &#x1f680;所屬專欄&#xff1a;Vue3 文章目錄1. 計算屬性1.1 computed函數1.2 計算屬性VS普通函數1.3 計算屬性的完整寫法2. 監聽器3.總結1. 計算屬性 計算屬性&#xff08;compu…

Linux Swap區深度解析:為何禁用?何時需要?

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄前言一、Swap區&#xff1a;Linux的"內存救生圈"二、為什么要禁用Swap&#xff1f;性能的隱形殺手三、何時應該使用Swap&#xff1f;不可或缺的場景四、如…

用TensorFlow進行邏輯回歸(三)

邏輯回歸Logistic regression這個腳本展示如何用TensorFlow求解邏輯回歸。 ()ysigmoid(Axb)我們使用低出生重量數據,特別地:y 0 or 1 low birth weightx demographic and medical history dataimport matplotlib.pyplot as pltimport numpy as npimport tensorflow as tfimp…

mingw 編譯 assimp v6.0.2 解決編譯報錯

mingw 編譯 assimp v6.0.2 理論上看這個就能滿足&#xff1a;在Windows下使用CMakeMinGW64編譯Assimp庫 環境變量問題 i386 architecture of input file CMakeFiles\assimp.dir/objects.a(assimp.rc.obj)’ is incompatible with i386:x86-64 output collect2.exe: error: ld r…

Windows 11清理C盤方法大全:磁盤清理/禁用休眠/系統還原點/優化大師使用教程

Windows 11清理C盤方法1. 使用磁盤清理工具步驟&#xff1a;按 Win S 搜索“磁盤清理”&#xff0c;打開工具。選擇C盤&#xff0c;點擊“確定”。勾選需要清理的文件類型&#xff08;如臨時文件、系統錯誤內存轉儲等&#xff09;&#xff0c;點擊“確定”。確認刪除操作&…

Rabbitmq Direct Exchange(直連交換機)多個消費者,配置相同的key ,隊列,可以保證只有一個消費者消費嗎

思考可以保證消費不被重復消費&#xff0c;因為通過輪詢一個消息只會投遞給一個消費者。但是不是一個消費者消費&#xff0c;而是多個輪詢消費在 RabbitMQ 中&#xff0c;如果多個消費者&#xff08;Consumers&#xff09;同時訂閱 同一個隊列&#xff08;Queue&#xff09;&am…

設計模式是什么呢?

1.掌握設計模式的層次第一層&#xff1a;剛剛學編程不久&#xff0c;聽說過什么是設計模式。第二層&#xff1a;有很長時間的編程經驗&#xff0c;自己寫過很多代碼&#xff0c;其中用到了設計模式&#xff0c;但是自己不知道。第三層&#xff1a;學習過設計模式&#xff0c;發…

ThreadLocal使用詳解-從源碼層面分析

從demo入手看效果 代碼Demostatic ThreadLocal tl1 new ThreadLocal();static ThreadLocal tl2 new ThreadLocal();static ThreadLocal tl3 new ThreadLocal();public static void main(String[] args) {tl1.set("123");tl2.set("456");tl3.set("4…

CPO:對比偏好優化—突破大型語言模型在機器翻譯中的性能邊界

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" CPO&#xff1a;對比偏好優化—突破大型語言模型在機器翻譯中的性能邊界 摘要 中等規模的大型語言模型&#xff08;LLMs&#xff09;&#xff0c;如參數量為 7B 或 13B 的模型&#xff0c;在機器翻譯&#xff0…