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…