当前位置: 首页 > java >正文

linux kernel 内存回收水位线调整方法

调整Linux内核的内存回收水位线可以通过以下步骤完成,确保系统在内存管理方面更符合特定需求:

1. 理解内存水位线

  • min:系统保留的最小空闲内存,低于此值会触发直接内存回收(同步回收),可能导致进程阻塞。

  • low:当可用内存低于此值时,内核开始后台回收(kswapd进程),直到达到high水位。

  • high:内存充足时的阈值,回收过程停止。

2. 查看当前水位线

使用/proc/zoneinfo查看各内存区域(zone)的水位线:


cat /proc/zoneinfo | grep -E "Node|min|low|high"

输出示例(单位为页面数,页面大小通常为4KB):


Node 0, zone   Normalpages free     30387min      1485low      1856high     2227

3. 调整水位线参数

方法一:修改 vm.min_free_kbytes
  • 该参数设置系统保留的全局最小空闲内存(KB),直接影响min水位线,lowhigh基于此计算。

  • 设置方法

    
    sysctl -w vm.min_free_kbytes=65536  # 临时生效
    • 永久生效:将vm.min_free_kbytes=65536写入/etc/sysctl.conf,执行sysctl -p

方法二:调整 watermark_scale_factor
  • 控制highlow之间的间隔(默认10,范围1-1000),值越大间隔越宽,减少回收频率。

  • 设置方法

    
    echo 500 > /proc/sys/vm/watermark_scale_factor  # 临时生效
    • 永久生效:将vm.watermark_scale_factor=500写入/etc/sysctl.conf,执行sysctl -p

4. 验证调整结果

重新检查/proc/zoneinfo确认水位线是否更新:


cat /proc/zoneinfo | grep -E "Node|min|low|high"

5. 注意事项

  • 性能影响:增大min_free_kbytes会减少可用内存,可能导致频繁回收;过小则增加OOM风险。

  • NUMA系统:在NUMA架构中需分别调整各节点的水位线,参数路径如/proc/sys/vm/numa_zonelist_order

  • 内核版本差异:不同内核版本参数可能不同,建议参考对应版本的文档(如Documentation/sysctl/vm.txt)。

示例配置

若希望系统保留64MB最小内存,并扩大回收间隔:


# 设置最小保留内存为65536KB(64MB)
sysctl -w vm.min_free_kbytes=65536# 扩大high-low间隔至默认的50倍(更少但更大量的回收)
echo 500 > /proc/sys/vm/watermark_scale_factor

通过合理调整这些参数,可优化系统在内存压力下的行为,平衡性能与稳定性。

# cat /proc/zoneinfo
Node 0, zone      DMAper-node statsnr_inactive_anon 23nr_active_anon 1494nr_inactive_file 1696nr_active_file 1938nr_unevictable 0nr_slab_reclaimable 3212nr_slab_unreclaimable 3257nr_isolated_anon 0nr_isolated_file 0workingset_refault 0workingset_activate 0workingset_nodereclaim 0nr_anon_pages 1511nr_mapped    834nr_file_pages 3665nr_dirty     5nr_writeback 0nr_writeback_temp 0nr_shmem     34nr_shmem_hugepages 0nr_shmem_pmdmapped 0nr_anon_transparent_hugepages 0nr_unstable  0nr_vmscan_write 0nr_vmscan_immediate_reclaim 0nr_dirtied   49nr_written   44pages free     460692min      1378low      1852high     2326spanned  520192present  520192managed  475127protection: (0, 0, 0)nr_free_pages 460692nr_zone_inactive_anon 23nr_zone_active_anon 1494nr_zone_inactive_file 1696nr_zone_active_file 1938nr_zone_unevictable 0nr_zone_write_pending 5nr_mlock     0nr_page_table_pages 65nr_kernel_stack 1104nr_bounce    0nr_free_cma  294073pagesetscpu: 0count: 122high:  186batch: 31vm stats threshold: 20cpu: 1count: 128high:  186batch: 31vm stats threshold: 20node_unreclaimable:  0start_pfn:           4096node_inactive_ratio: 0
Node 0, zone   Normalpages free     0min      0low      0high     0spanned  0present  0managed  0protection: (0, 0, 0)
Node 0, zone  Movablepages free     0min      0low      0high     0spanned  0present  0managed  0protection: (0, 0, 0)
#
#
# free -mtotal        used        free      shared  buff/cache   available
Mem:           1855          28        1800           0          26        1804
Swap:             0           0           0
# freetotal        used        free      shared  buff/cache   available
Mem:        1900508       29220     1843752         136       27536     1848160
Swap:             0           0           0
# cat /proc/vm
vmallocinfo  vmstat
# cat /proc/meminfo
MemTotal:        1900508 kB
MemFree:         1843628 kB
MemAvailable:    1848036 kB
Buffers:            3852 kB
Cached:            10828 kB
SwapCached:            0 kB
Active:            13580 kB
Inactive:           6876 kB
Active(anon):       5808 kB
Inactive(anon):       92 kB
Active(file):       7772 kB
Inactive(file):     6784 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:          5848 kB
Mapped:             3332 kB
Shmem:               136 kB
Slab:              24060 kB
SReclaimable:      12856 kB
SUnreclaim:        11204 kB
KernelStack:        1088 kB
PageTables:          236 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      950252 kB
Committed_AS:      10700 kB
VmallocTotal:   263159744 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
CmaTotal:        1179648 kB
CmaFree:         1176292 kB
#
http://www.xdnf.cn/news/9352.html

相关文章:

  • 第九章 Java基础-集合
  • 鸿蒙OSUniApp 制作简洁的用户个人中心页面#三方框架 #Uniapp
  • 【Springboot+LangChain4j】实现多轮对话,即记忆对话功能
  • v4.0 论文投稿-Latex论文投稿注意事项
  • 基于Alibaba Cloud Linux + 宝塔面板安装 LibreOffice 全攻略流程
  • 怎么实现pid隔离
  • 海信IP810N-72UB0贵州联通原机分区备份包
  • mysql 合集
  • TLE9893-2QKW62S新建Keil MDK工程
  • cursor使用mcp
  • 智能门禁的项目
  • 用 Python 打造你的专属虚拟试衣间!——AI+AR 如何改变时尚体验
  • 关于CSDN和Github的操作
  • vtk管线
  • 递归:JavaScript中的强大工具
  • Java 继承(上)
  • 使用Auto-Coder对js文件进行审计并修复漏洞 1.5版本
  • leetcode 53. 最大子数组和
  • How API Gateways handle raw TCP packets
  • Python解压多种格式压缩包
  • 【git】 pull + rebase 或 pull + merge什么区别?
  • Java 继承(下)
  • LVS负载均衡群集技术深度解析
  • 三天掌握PyTorch精髓:从感知机到ResNet的快速进阶方法论
  • 《计算机组成原理》第 2 章 - 计算机的发展及应用​
  • 【Seata分布式事务源码分析】
  • 用python制作一个五子棋游戏
  • 【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知
  • COMSOL三维梯度多孔结构流体流动模拟
  • eda学习前传又名电赛Day01