Linux 內存管理與緩存機制

文章目錄

    • 內存介紹
      • buff/cache 與匿名頁
      • Swap(交換空間):內存的臨時倉庫
    • 內存回收與Swap機制
      • 內存頁的兩種類型
      • 內核回收決策流程
      • 如何解讀內存狀態
      • drop_caches 參數說明
    • 實踐操作
      • 查看內存狀態
      • 查看Swap狀態
      • 釋放 buff/cache 緩存

內存介紹

當使用 free 命令:查看內存使用時,會出現:

參數含義
total內存總數
used已用內存
free空閑內存
shared共享內存
buff/cache緩存(buffer+cache)
available可用內存

buff/cache 與匿名頁

Linux 內存頁分為兩類:

類型體現位置來源回收方式
文件頁buff/cache文件內容/元數據丟棄/寫回文件,不進Swap
匿名頁used-buff/cache程序堆/棧寫入Swap
  • buff/cache:即文件頁(Page Cache + Buffer Cache)總和,用于加速文件和塊設備訪問。
  • 匿名頁:程序運行時動態分配的內存(如堆、棧),不包含在buff/cache中,是Swap的主要來源。

自 Linux 2.4 起,Page Cache 和 Buffer Cache 已合并為統一的文件緩存系統。[

Swap(交換空間):內存的臨時倉庫

  • 本質:一塊特殊的磁盤空間(分區或文件),作為物理內存耗盡時的緊急備用。
  • 作用:當物理內存不足時,內核會把內存中不活躍的"匿名頁"(見下文)暫時寫入 Swap,從而釋放物理內存給更需要的進程。
  • 代價:硬盤讀寫速度遠慢于內存。頻繁使用 Swap 會導致系統性能急劇下降(卡頓),這個現象稱為"顛簸"(Thrashing)。

內存回收與Swap機制

內存頁的兩種類型

程序占用的內存可分為兩類,內核對它們有不同的回收策略:

  1. 文件頁 (File-backed Pages)

    • 內容:程序代碼、讀取的文件等,即 Page Cache 的主要組成部分。
    • 特點:在硬盤上有對應的源文件(“老家”)。
    • 回收方式:內存不足時,干凈頁直接丟棄(下次從源文件讀回),臟頁(修改過)先寫回源文件再丟棄。這類內存不會進入 Swap
  2. 匿名頁 (Anonymous Pages)

    • 內容:程序的堆、棧等動態分配的內存(如 mallocnew 申請的)。
    • 特點:在硬盤上沒有源文件(憑空創造)。
    • 回收方式:內存不足時,如果這部分內存不活躍,內核會將其寫入 Swap 分區,這是它們唯一的"臨時避難所"。

內核回收決策流程

當內存緊張時,內核會遵循以下優先級進行回收:

  1. 首先,回收文件頁 (Page Cache):這是成本最低的操作,優先回收。
  2. 最后,交換匿名頁 (Swap Out):只有在回收文件頁后內存仍然不足的情況下,才會把不活躍的匿名頁寫入 Swap。

如何解讀內存狀態

  • buff/cache 占用高:通常是好事。表明 Linux 正在充分利用空閑內存加速文件讀寫,系統會在需要時自動回收。
  • swap 被使用:是一個警示信號。表明物理內存不足以容納所有活躍程序的匿名內存,需要關注應用是否存在內存泄漏或配置不當。
  • buff/cache + swap 被使用:典型應用內存占用過度的表現。

drop_caches 參數說明

  • 手動釋放緩存可用于臨時解決問題或測試,但生產環境慎用,它可能掩蓋真正的內存問題。
  • /proc/sys/vm/drop_caches 文件用于手動釋放緩存:
    • 0:默認,自動管理
    • 1:釋放頁緩存(page cache)
    • 2:釋放目錄項和 inode
    • 3:釋放所有緩存

提示: 釋放緩存前建議先執行 sync,確保數據寫入磁盤。

實踐操作

查看內存狀態

# 以 MB 單位顯示內存使用情況
free -m

查看Swap狀態

# 查看當前啟用的swap空間(分區或文件)
swapon -s

釋放 buff/cache 緩存

# 查看當前內存狀態
free -m# 同步緩存到磁盤
sync# 只釋放頁緩存
echo 1 > /proc/sys/vm/drop_caches
# 釋放目錄項和 inode
echo 2 > /proc/sys/vm/drop_caches
# 釋放所有緩存(常用)
echo 3 > /proc/sys/vm/drop_caches
# 恢復為自動管理
echo 0 > /proc/sys/vm/drop_caches

風險提示: 生產環境不建議頻繁手動釋放緩存,頻繁清理可能掩蓋應用層內存問題,建議優先優化應用程序內存管理。

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

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

相關文章

【嵌入式電機控制#6】編碼器原理與內部構造

一、簡介 編碼器是一種將直線位移和角位移數據轉換為脈沖信號、二進制編碼的設備。常用于測量物體運動的位置、角度或速度。 二、分類 1. 按檢測分類: (1)光電式編碼器 (2)磁電式編碼器 2. 編碼類型分類: …

FastAPI 安裝使用教程

一、FastAPI 簡介 FastAPI 是一個現代、快速(高性能)的 Web 框架,基于 Python 3.7 和標準類型提示構建,廣泛應用于 API 服務開發。它使用 Pydantic 進行數據驗證,集成自動生成 OpenAPI 和文檔 UI,非常適合…

【WPF】WPF(樣式)

Window.Resources 當前窗體作用域資源 TargetType“Button” 使得當前窗體的組件類型都適配此樣式<Window.Resources><Style TargetType"Button"><Setter Property"Background" Value"WhiteSmoke"></Setter><Setter…

Jmeter(六):json斷言元件,jmeter參數化實現

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 json斷言元件 json斷言元件介紹 json斷言元件與響應斷言元件的功能類型&#xff0c;它只針對響應正文為json數據格 式的內容進行斷言功能。 添加路徑&…

python3常用模塊

1 數學運算模塊 math “math”模塊提供了許多常用的數學函數&#xff0c;例如三角函數、四舍五入、指數、對數、平方根、總和等 import math1.1 常數 math.pi 返回圓周率的數學常數。math.e 返回指數的數學常數示例&#xff1a; print(math.pi) print(math.e)1.2 fabs(x) …

基于Pandas和FineBI的昆明職位數據分析與可視化實現(二)- 職位數據清洗與預處理

文章目錄 一、數據集介紹二、缺失值處理三、重復值處理四、薪資數據格式處理五、技能格式處理六、拆分薪資列并處理異常值七、拆分工作區域列八、清洗后的數據集九、完整代碼 一、數據集介紹 這份昆明職位數據集源自 Boss 直聘&#xff0c;數據量頗為豐富&#xff0c;包含 177…

工業4.0核心引擎!意法STM32F407ZET6 單片機 賦能智能PLC/網關設計

STM32F407ZET6 單片機深度解析 1. 產品定位 STM32F407ZET6 是意法半導體&#xff08;STMicroelectronics&#xff09;推出的 高性能ARM Cortex-M4單片機&#xff0c;采用 LQFP144封裝&#xff0c;主打 浮點運算、豐富外設和工業級可靠性&#xff0c;廣泛應用于需要復雜算法和實…

[Andrej Karpathy_2] vibe coding | 大型語言模型的1960年代 | 自主性滑塊

Hugging Face的Tom Wolf分享了一段我非常喜歡的視頻&#xff0c;這些孩子正在進行氛圍編程。 我覺得這是一個非常治愈的視頻&#xff0c;我愛這個視頻。&#xff08;they grow up "knowing" they can build anything &#x1f62d;greatness) 未來是美好的 前文&…

uv包管理常用命令

uv常用命令 uv init 初始化項目 uv add 包名 添加包&#xff1b;多個包名&#xff0c;中間用空格 uv tree 包的關系 uv remove 刪除所有包 uv sync 重新解析 安裝工具 1、mypy 檢測工具 uv tool install mypy uv tool run mypy xxx.py 使用 2、Ruff uv tool…

Nano-vLLM 源碼學習

以下內容由Trae生成。我只管問和排版。 Nano-vLLM 是一個從零構建的輕量級vLLM實現項目&#xff0c;具備快速離線推理、代碼可讀性高和優化功能豐富等特點&#xff0c;性能表現和原版vLLM相媲美。以下是該項目各目錄和文件的功能說明&#xff1a; 1. 根目錄&#xff1a; benc…

MySQL 8.4 備份與恢復完全指南

本文全面解析MySQL 8.4的備份與恢復機制&#xff0c;涵蓋備份類型、方法、策略及實際操作示例。 一、備份類型解析 1. 物理(原始)備份 vs 邏輯備份 特性物理備份邏輯備份原理直接復制數據庫目錄/文件&#xff08;如數據文件、日志&#xff09;導出邏輯結構&#xff08;CREATE…

Mac 部署Latex OCR并優化體驗(打包成App并支持全局快捷鍵)

&#x1f341; 前言 最近閱讀論文&#xff0c;在做筆記的時候總是要手動輸入一些latex公式&#xff0c;非常耗時。我使用Hapigo的Latex 公式識別&#xff0c;感覺還挺好用&#xff0c;但是缺陷是只有30次免費額度&#xff0c;于是在網上搜索了一下&#xff0c;發現可以通過本地…

128K 長文本處理實戰:騰訊混元 + 云函數 SCF 構建 PDF 摘要生成器

一、背景 在數字化辦公時代&#xff0c;PDF 文檔因其格式穩定、兼容性強等特點&#xff0c;成為知識分享與文檔存儲的主要載體之一。但隨著文檔規模的增長&#xff0c;如何快速提取關鍵信息成為亟待解決的問題。尤其對于 128K 字符及以上的長文本 PDF&#xff0c;傳統處理方法…

Elasticsearch 排序性能提升高達 900 倍

作者&#xff1a;來自 Elastic Benjamin Trent, Mayya Sharipova, Chenhui Wang 及 Libby Lin 了解我們如何通過更快的 float / half_float 排序和 integer 排序的延遲優化來加快 Elasticsearch 排序速度。 Elasticsearch 引入了大量新功能&#xff0c;幫助你為你的使用場景構建…

Nginx重定向協議沖突解決方案:The plain HTTP request was sent to HTTPS port

問題原因 ??服務器運行在 HTTPS 模式&#xff0c;但代碼卻發出了 HTTP 重定向指令&#xff0c;兩套協議對不上&#xff0c;瀏覽器直接報錯。?? 在Java中&#xff0c;常見于response.sendRedirect()方法的使用。該方法默認生成基于HTTP的絕對URL&#xff0c;即便原始請求是…

機器學習如何讓智能推薦“更懂你”,助力轉化率飛躍?

機器學習如何讓智能推薦“更懂你”,助力轉化率飛躍? 今天咱聊聊一個電商、內容平臺、社交App都離不開的“秘密武器”——智能推薦系統,以及機器學習到底如何幫它提升轉化率的。 說白了,轉化率就是“點進去買單”的概率。智能推薦做得好,轉化率能蹭蹭上漲;做不好,用戶滑…

Ruby CGI Session

Ruby CGI Session 引言 CGI&#xff08;Common Gateway Interface&#xff09;是一種網絡服務器與外部應用程序&#xff08;如腳本或程序&#xff09;進行通信的協議。在Ruby語言中&#xff0c;CGI被廣泛用于創建動態網頁。本文將深入探討Ruby CGI Session的相關知識&#xf…

從零開始的云計算生活——第二十四天,重起航帆,初見MySQL數據庫

一.故事劇情 接下來要進入到一條比較長的路——mysql數據庫&#xff0c;之后會用一段時間來學習mySQL數據庫的內容&#xff0c;今天先從基礎開始介紹mysql數據庫。 二.MySQL數據庫概述 1.數據庫概念 數據庫(Database) 簡稱DB&#xff0c;按照一定格式存儲數據的一些文件的…

ES文件管理器v4.4.3(ES文件瀏覽器)

前言 ES文件管理器&#xff08;也叫ES文件瀏覽器&#xff09;是一款手機上用來看和管理文件的工具。你可以用它像在電腦上一樣&#xff0c;把文件整理進不同的文件夾&#xff0c;查找照片、文檔、視頻都很方便。它還能看到平時看不到的隱藏文件&#xff0c;幫你清理一些沒用的…

leetcode:693. 交替位二進制數(數學相關算法題,python3解法)

難度&#xff1a;簡單 給定一個正整數&#xff0c;檢查它的二進制表示是否總是 0、1 交替出現&#xff1a;換句話說&#xff0c;就是二進制表示中相鄰兩位的數字永不相同。 示例 1&#xff1a; 輸入&#xff1a;n 5 輸出&#xff1a;true 解釋&#xff1a;5 的二進制表示是&am…