linux内存水位watermark、内存保留lowmem_reserve_ratio

一、两个概念


1.内存水位:watermark


    当系统中空闲内存低于watermark[low],开始启动kswapd进行页面回收,每个zone都有一个kswapd,直到到达high才开始停止回收。如果上层申请内存速度过快,导致空闲内存降至min一下,内核就会direct reclaim,就是直接在应用程序的上下文中进行页面回收,min以下的内存空间是给系统特殊使用的,不会给用户态程序用。

2.内存保留:lowmem_reserve_ratio


这个参数作用是各个zone之间预留一些空间,以防止高端zone在没有内存的情况下过度使用低端zone的内存资源。低端的zone有自己特殊的作用,遵循尽量使用高端内存时不使用低端内存的方法,防止高端内存分配不足的时候抢占稀有的地段内存。

二、具体流程分析

1、查看当前的内存水位配置

[root@jdsh lib]$cat /proc/zoneinfo | grep -E "Node|min|low|high|managed"
Node 0, zone   Normal
        min      502
        low      627
        high     753
        managed  63279
              high:  90
[root@jdsh lib]$cat /proc/sys/vm/min_free_kbytes 
2011

2、配置当前的内存水位10M

[root@jdsh lib]$echo 10240 > /proc/sys/vm/min_free_kbytes 
[root@jdsh lib]$cat /proc/sys/vm/min_free_kbytes 
10240
[root@jdsh lib]$cat /proc/zoneinfo | grep -E "Node|min|low|high|managed"
Node 0, zone   Normal
        min      2560
        low      3200
        high     3840
        managed  63279
              high:  90

以上任何一个数值的单位是4K,所以managed的实际内存=63279*4=253116
计算公式:watemark[WMARK_MIN] = min_free_kbytes/4*zone.pages/zone.allpages
实际计算:watemark[WMARK_MIN] = 10240/4*63279/63279=2560


3、低端保留内存lowmem_reserve_ratio计算

[root@jdsh lib]$cat /proc/zoneinfo | grep -E "Node|managed|protection"
Node 0, zone   Normal
        managed  63279
        protection: (0, 0)

[root@jdsh lib]$cat /proc/sys/vm/lowmem_reserve_ratio 
32

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值