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

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
#

相关文章:

  • 《独立开发工具 • 半月刊》 第 003 期
  • java每日精进 5.27【分布式锁】
  • [网页五子棋][用户模块]客户端开发(登录功能和注册功能)
  • 《计算机组成原理》第 3 章 - 系统总线
  • 2025年- H54-Lc162--437. 路径总和 III(递归[回溯]OR深搜)--Java版
  • 24 数组基础与应用详解:定义(静态/VLA)、初始化、访问(有效/越界/内存调试)、遍历、大小端字节序
  • C++23:关键特性与最新进展深度解析
  • DAY9 热力图和箱线图的绘制
  • 翻转二叉树
  • 【基于STM32的新能源汽车智能循迹系统开发全解析】
  • React---day2
  • 软件同步机制-Peterson解决方案 简单讲解
  • day38 python Dataset和Dataloader
  • SSM整合:Spring+SpringMVC+MyBatis完美融合实战指南
  • 基于大模型的慢性胃炎全周期预测与诊疗方案研究报告
  • 【Quest开发】空间音频的使用
  • 异常:UnsupportedOperationException: null
  • 【运维_日常报错解决方案_docker系列】一、docker系统不起来
  • OpenCV CUDA模块图像处理------颜色空间处理之用于执行伽马校正(Gamma Correction)函数gammaCorrection()
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()
  • 电子商务网站包括/四川网站推广公司
  • 局域网网页制作工具/深圳优化排名公司
  • 做学校后台网站/青岛网
  • 一般通过486/seo整站怎么优化
  • 福州网站建设市场/百度竞价怎么做效果好
  • 家居网站建设总结/百度软文推广公司