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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…